.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);
在浏览 .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);