演算子を使用すると、次の==
ことができます。
int a = 10;
int b = 10;
a==b //true
この場合、C# はコンパイル時に決定を下し、仮想動作は発生しません。
しかし、私が使用する場合:
object a = 10;
object b = 10;
a == b //false
object
はクラス (参照型) でありa
、b
それぞれがヒープ上の異なるボックス化されたオブジェクトを参照しているため、結果は false です。
それを解決するには、次のことを行う必要があります。
object a = 10;
object b = 10;
a.Equals (b) // True
Equals
は仮想メソッドであり、オブジェクトの実際の型に応じて実行時に解決されるためです。
私の質問は:
なぜ C# の設計者は、== を仮想化して問題を回避せず、機能的に Equals と同じにしなかったのでしょうか?