.NET代表奇怪的优化

时间:2017-11-15 06:16:23

标签: c# equality

在浏览.NET Reference源代码时,我发现了以下代码,从https://referencesource.microsoft.com/#mscorlib/system/delegate.cs,196复制。

    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的代码时,我找不到==的定义。

问题是:

==上的{p> Object,它在哪里定义,它的行为是什么?

1 个答案:

答案 0 :(得分:1)

来自docs

对于字符串以外的引用类型,==如果其两个操作数引用同一个对象,则返回true

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