微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

C#在派生类中使用基类的重载二进制运算符+,*,/,-

如何解决C#在派生类中使用基类的重载二进制运算符+,*,/,-

我想知道是否有一种方法可以使用重载的二进制运算符,例如派生类中基类的+运算符。 例如,我有以下2类:

class Class1
{
    public int num { get; set; }



    public Class1(int a)
    {
        num = a;
    }

    public static Class1 operator +(Class1 a,Class1 b)
    {           
        return new Class1(a.num + b.num);
    }
}

class Class2 : Class1
    {
        int x { get; set; } = 99;
        public Class2(int a):base(a)
        {

        }
         
    }

Class1重载+运算符并返回Class1的对象,其中num的值是作为Class1类型的参数a和b的属性num的总和。

Class2派生自Class1。 Class2的+操作的工作方式与Class1的+操作相同,因此我希望Class2使用Class1的+操作。问题在于,重载+运算符方法需要2个Class1类型的对象并返回Class1对象。因此,如果我试图在Class2的2个对象之间进行+操作,例如

Class2 a = new Class2(4);
Class2 b = new Class2(5);
a = a + b;

出现以下错误: 严重性代码说明项目文件行抑制状态

错误CS0266无法将类型'Class1'隐式转换为'Class2'。一个 存在显式转换(您是否缺少演员表?)

所以我试图像这样投射它:

a = (Class2)(a + b);

但是我以以下运行时错误结尾:

system.invalidCastException:'无法转换类型的对象 “ TimeSeriesModule.Class1”键入“ TimeSeriesModule.Class2”。

一个很好的解决方案是我可以在派生类中使用基类的重载运算符,如果强制转换不是问题,那将是很好的选择,但我不确定这些解决方案中的任何一个都可能。

谢谢。

亲切问候 最高

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。