我做了一个简单的测试:
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);运行,因为静态类型是int。参数类型是对象。但为什么会这样true?它是否取消了值?
似乎有些东西在没有我通知的情况下以某种方式拆箱:-(