.NET Delegate 怪异优化

.NET Delegate weird optimization

在浏览 .NET 参考源时,我发现了以下代码,从 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 的代码时,我找不到 ==.

的定义

那么问题是:

== on Object,它在哪里定义,它的行为是什么?

来自docs

对于字符串以外的引用类型,== returns true 如果它的两个操作数引用同一个对象.

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