我不明白它为什么会起作用......
class Program
{
static void Main(string[] args)
{
IComparable.Equals(12, 3);
}
}
Run Code Online (Sandbox Code Playgroud)
IL代码:
.method private hidebysig static void Main(string[] args) cil managed
{
.entrypoint
// Code size 21 (0x15)
.maxstack 8
IL_0000: nop
IL_0001: ldc.i4.s 12
IL_0003: box [mscorlib]System.Int32
IL_0008: ldc.i4.3
IL_0009: box [mscorlib]System.Int32
IL_000e: call bool [mscorlib]System.Object::Equals(object,
object)
IL_0013: pop
IL_0014: ret
} // end of method Program::Main
Run Code Online (Sandbox Code Playgroud)
它编译为bool Object.Equals(Object,Object),但为什么呢?
Eri*_*ert 12
它编译
bool Object.Equals(Object,Object),但为什么?
"为什么?" 问题不精确且难以回答,所以我会回答"什么?" 题.
C#规范的哪一部分证明了这种奇怪行为的合法性?
C#规范的第7.4节说明当您对表单进行成员查找时 T.N
...该集由T中名为N的所有可访问成员组成,包括继承成员和对象中名为N的可访问成员 ... [强调添加]
object.Equals名为可访问成员Equals中object,所以它是一个候选人.