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 (将#修改为@)