12

なぜそれが機能しているのか理解できません...

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) にコンパイルされますが、なぜですか?

4

1 に答える 1

12

にコンパイルされますがbool Object.Equals(Object,Object)、なぜですか?

"どうして?" 質問は不正確で答えるのが難しいので、代わりに「何?」と答えます。質問。

この奇妙な動作の正当性を正当化する C# 仕様のセクションはどれですか?

C# 仕様のセクション 7.4 では、フォームのメンバー ルックアップを実行しているときに、T.N

...セットは、継承されたメンバーとオブジェクト内のNという名前のアクセス可能なメンバーを含む、T内のNという名前のすべてのアクセス可能なメンバーで構成されています... [強調が追加されました]

object.Equalsは で名前が付けられたアクセス可能なメンバーEqualsobjectあるため、候補です。

于 2013-04-09T21:25:09.903 に答える