私は簡単なテストを行いました:
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.Equals
:これは参照が異なること を意味し、最初の答えはそうであるべきであることを意味するFalse
(そして私はおそらくここで間違っている)。何故ですか?2行目について
t.Equals(3)
繰り返しますが、
t's
静的型はオブジェクトです。Object.Equals
実行中です。どうしてtrue
ですか?3行目について
3.Equals(aa)
public override bool Equals(object obj);
静的型はin
tなので、実行中だと思います。paramタイプはobjectです。しかし、なぜそれをするtrue
のですか?値のボックスを解除しますか?
何かが、どういうわけか私の通知なしにオブジェクトの箱を開けているようです:-(