gpt4 book ai didi

c# - == 对象被装箱时运算符重载

转载 作者:太空狗 更新时间:2023-10-29 23:11:58 25 4
gpt4 key购买 nike

下面代码的输出如下:

不等于
等于

请注意 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);
}
}

最佳答案

不,基本上。 == 使用静态分析,因此将使用对象==。听起来您需要使用 object.Equals(x,y) 代替(或者 x.Equals(y) 如果您知道两者都不为 null),它使用多态性.

关于c# - == 对象被装箱时运算符重载,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/733848/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com