使用==
操作员我可以做到这一点:
int a = 10;
int b = 10;
a==b //true
在这种情况下,C# 做出编译时决定,并且没有虚拟行为发挥作用。
但是,如果我使用:
object a = 10;
object b = 10;
a == b //false
结果是假的,因为object
它是一个类(引用类型),a
并且b
每个都引用堆上不同的装箱对象。
为了解决它,我应该这样做:
object a = 10;
object b = 10;
a.Equals (b) // True
因为Equals
是一个虚拟方法,它在运行时根据对象的实际类型解析。
我的问题是:
为什么 C# 的设计者没有通过使 == 虚拟化而在功能上与 Equals 相同来避免这个问题?