以下代码的输出如下:
不等于
平等
请注意x和xx类型的差异以及==运算符重载仅在第二种情况下执行,而不是在第一种情况下执行.
有没有办法可以重载==运算符,以便在MyDataObejct实例之间进行比较时始终执行它.
编辑1:#这里我想覆盖MyDataClass上的==运算符,我不知道如何做到这一点,以便case1也执行重载==实现.
class Program {
static void Main(string[] args) {
// CASE 1
Object x = new MyDataClass();
Object y = new MyDataClass();
if ( x == y ) {
Console.WriteLine("equal");
} else {
Console.WriteLine("not equal");
}
// CASE 2
MyDataClass xx = new MyDataClass();
MyDataClass yy = new MyDataClass();
if (xx == yy) {
Console.WriteLine("equal");
} else {
Console.WriteLine("not equal");
}
}
}
public class MyDataClass {
private int x = 5;
public static bool operator ==(MyDataClass a, MyDataClass b) {
return a.x == b.x;
}
public static bool operator !=(MyDataClass a, MyDataClass b) {
return !(a == b);
}
}
Run Code Online (Sandbox Code Playgroud)
不,基本上.==使用静态分析,因此将使用该对象==.听起来你需要使用object.Equals(x,y)(或者x.Equals(y)如果你知道它们都不是null),它使用多态.