我做了一个简单的测试:
object t = 3;
object aa = 3;
#1 Console.WriteLine(t.Equals(aa));
#2 Console.WriteLine(t.Equals(3));
#3 Console.WriteLine(3.Equals(aa));
他们都是真的。(这实际上是我的问题)。
看object
,这是使用的功能:
public virtual bool Equals(object obj);
等号是虚拟的。所以它可以被覆盖。
但我没有看到任何多态行为。这只是一个纯装箱值。
关于第 1 行
t.Equals(aa)
引用类型是静态类型——Object。
所以我认为它应该调用
Object.Equals
: 这意味着参考是不同 的,这意味着第一个答案应该是False
.(我可能在这里错了)。这是为什么?关于第 2 行
t.Equals(3)
同样,
t's
静态类型是对象。运行也是如此Object.Equals
。怎么回事true
?关于第 3 行
3.Equals(aa)
我相信它正在
public override bool Equals(object obj);
运行,因为静态类型是in
t。参数类型是对象。但为什么会这样true
?它是否取消了值?
似乎有些东西在没有我通知的情况下以某种方式拆箱:-(