2017-11-15 2 views
-1

.NET参照ソースを参照しているうちに、https://referencesource.microsoft.com/#mscorlib/system/delegate.cs,196からコピーされた次のコードが見つかりました。.NET Delegate奇妙な最適化

public static Delegate Combine(Delegate a, Delegate b) 
    { 
     if ((Object)a == null) // cast to object for a more efficient test 
      return b; 

     return a.CombineImpl(b); 
    } 

キャストが(Object)であることに注意してください。この理由は、Delegate==オペレータオーバーライドを使用するのではなく、Objectのオペレーションオーバーライドを使用することを前提としているからです。しかし、Objectのコードをブラウズすると、==の定義が見つかりません。

質問は次のようになります。それはそれの挙動何、定義されてObject、上

==docsから

+0

[This(https://stackoverflow.com/a/7346086/3181933)? – john

答えて

1

trueは、その2つのオペランドが同じオブジェクトを参照し場合

列以外の基準タイプについて、==戻ります。

// Reference equality: different objects, 
// same boxed value: False. 
object s = 1; 
object t = 1; 
Console.WriteLine(s == t);