C# 运算符重载 ==

Kas*_*v92 4 c# operator-overloading

我试图重载 == 运算符,但出现以下错误:

预期可重载一元运算符

这是我的代码

  public bool operator == (MyClass nm1)
  {
       return true;
  }

  public bool operator != (MyClass m2)
  {
       return true;
  }
Run Code Online (Sandbox Code Playgroud)

我遵循了msdn 说明,但仍然遇到相同的错误

das*_*ght 6

当你重载时,operator ==你应该在一个static接受两个实例作为参数的方法中执行它:

public static bool operator == (MyClass leftSide, MyClass rightSide) {
     return true;
}

public static bool operator != (MyClass leftSide, MyClass rightSide) {
     return !(leftSide == rightSide);
}
Run Code Online (Sandbox Code Playgroud)

static 上下文使您的运算符的代码感觉更“对称”,因为执行比较的代码不属于左实例或右实例。

此外,static无法“虚拟化”操作符(您仍然可以通过调用虚拟函数在实现内部执行此操作,但是您必须显式执行此操作)。

  • `+` 也必须是 `static`,但它允许一元重载和二进制重载。它们的调用方式如下: `var resultFromUn = +arg; var resultFromBi = arg0 + arg1;` (3认同)