无法为对象类重载运算符'+'

lov*_*nce 2 c# asp.net operator-overloading object

object在c#中有两个或更多类的变量,它有整数值.我想重载'+'运算符,以便在我想要添加或减去它们时我不必转换这些变量.这是我的代码如下:

public static object operator +( object obj1, object obj2)
{
    object o = Convert.toint32(obj1) + Convert.toint32(obj2);
   return o;
}
Run Code Online (Sandbox Code Playgroud)

没问题,我得到一个错误说 "One of the parameters of a binary operator must be the containing type"

为什么会这样?任何帮助表示赞赏!

Jon*_*eet 7

编译器错误告诉您究竟出了什么问题 - 如果您要创建自定义二进制运算符,则至少有一个参数类型(对于操作数)必须与您声明运算符的类型相同(或者它的可空版本,用于值类型).

这是C#4规范第10.10.2节中规定的:

以下规则适用于二元运算符声明,其中T表示包含运算符声明的类或结构的实例类型:

  • 二元非移位运算符必须采用两个参数,其中至少有一个必须具有类型T或T?,并且可以返回任何类型.
  • 二进制<<>>运算符必须带两个参数,第一个参数必须是T或T类型?第二个必须有int或int?类型,并且可以返回任何类型.

就个人而言,object如果你知道它们实际上是int值,我会尽量避免使用类型变量.为什么不改变int变量呢?

如果您正在使用C#4,另一种方法是将它们变为dynamic变量,其中运算符重载将在执行时而不是编译时应用.