Подтвердить что ты не робот

Могущественная магия - почему это действительное утверждение?

Я не понимаю, почему он работает...

class Program
{
    static void Main(string[] args)
    {
        IComparable.Equals(12, 3);
    }
}

Код 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

Он компилируется для bool Object.Equals(Object, Object), но почему?

4b9b3361

Ответ 1

Он компилируется до bool Object.Equals(Object,Object), но почему?

"Почему?" вопросы неточны и трудно ответить, поэтому вместо этого я отвечу "что?". вопрос.

Какой раздел спецификации С# оправдывает законность этого странного поведения?

В разделе 7.4 спецификации С# указано, что когда вы выполняете поиск элемента формы T.N

... множество состоит из всех доступных членов с именем N в T, включая унаследованные члены и доступные члены с именем N в объекте... [выделено мной]

object.Equals является доступным членом с именем Equals в object, поэтому он является кандидатом.