Могущественная магия - почему это действительное утверждение?
Я не понимаю, почему он работает...
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), но почему?
Ответы
Ответ 1
Он компилируется до bool Object.Equals(Object,Object)
, но почему?
"Почему?" вопросы неточны и трудно ответить, поэтому вместо этого я отвечу "что?". вопрос.
Какой раздел спецификации С# оправдывает законность этого странного поведения?
В разделе 7.4 спецификации С# указано, что когда вы выполняете поиск элемента формы T.N
... множество состоит из всех доступных членов с именем N в T, включая унаследованные члены и доступные члены с именем N в объекте... [выделено мной]
object.Equals
является доступным членом с именем Equals
в object
, поэтому он является кандидатом.