Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/286.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C#运算符重载==_C#_Operator Overloading - Fatal编程技术网

C#运算符重载==

C#运算符重载==,c#,operator-overloading,C#,Operator Overloading,我试图重载==运算符,但出现以下错误: 应为可重载的一元运算符 这是我的密码 public bool operator == (MyClass nm1) { return true; } public bool operator != (MyClass m2) { return true; } 我遵循了,但仍然得到了相同的错误您需要静态,并且您需要两个参数,而不仅仅是一个 ==和=始终是二进制运算符(两个参数),而不是一元运算符(一个参数)

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

应为可重载的一元运算符

这是我的密码

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

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

我遵循了,但仍然得到了相同的错误

您需要
静态
,并且您需要两个参数,而不仅仅是一个


==
=
始终是二进制运算符(两个参数),而不是一元运算符(一个参数)。

当您重载
运算符==
时,您应该在一个
静态
方法中执行此操作,该方法将两个实例作为参数:

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

public static bool operator != (MyClass leftSide, MyClass rightSide) {
     return !(leftSide == rightSide);
}
static
上下文使操作员的代码感觉更“对称”,因为执行比较的代码不属于左实例或右实例

此外,
static
使运算符无法“虚拟化”(您仍然可以在实现内部通过调用虚拟函数来实现,但随后必须显式实现)。

如图所示,这些是二进制运算符,因此它们需要两个参数。操作符也应该是静态的,因为它们是类的一部分,而不是实例。见&


正确的签名是:

public static bool operator ==(MyClass nm1, MyClass other)
{

}

public static bool operator !=(MyClass nm1, MyClass other)
{

}

第二个参数不一定必须是
MyClass
类型,但至少必须是其中一个。

运算符方法是静态的。这意味着
==
=有2个操作数。单击同一页上的“操作符重载教程”链接。
publicstaticbool操作符==(MyClass m1,MyClass m2)
ohh我明白了。。第一个参数是左操作数吗?@Kasparov92是的,第一个操作数是左侧,第二个操作数是右侧。@Kasparov92是的,但顺序不重要,因为相等应该是对称的。我不明白这一点[静态上下文使运算符的代码感觉更“对称”。]
+
也必须是
静态的
,但它允许一元重载和二元重载。它们的调用方式如下:
var resultFromUn=+arg;var resultFromBi=arg0+arg1
  public static bool operator == (MyClass m1, MyClass m2)
  {
       return true;
  }

  public static bool operator != (MyClass m1, MyClass m2)
  {
       return true;
  }
public static bool operator ==(MyClass nm1, MyClass other)
{

}

public static bool operator !=(MyClass nm1, MyClass other)
{

}