2

IL での明示的なインターフェイスの実装を見てきました。Method次のクラスのメソッド(インターフェイスIAにはシングルMethod()があります):

public class B : IA
    object IA.Method() {
        /* code */
    }
}

次の IL メソッド シグネチャにコンパイルされます。

.method private hidebysig newslot virtual final instance object IA.Method() cil managed {
    .override IA::Method
    /* code */
}

私の質問は、なぜメソッド名IA.Method()が単なるストレートではなくIL なのMethodですか? これは実際には何を意味し、見逃しているとなぜ機能しないのでしょうか? ECMA仕様やグーグルで何も見つかりません。

4

2 に答える 2

3

これは、この方法でメソッドを複数回使用できるためです。

public class B : IA
{
    object Method() {    }
    object IA.Method() {    }
}

1つ目は通常の方法です。2 つ目は、インターフェイスの実装です。接頭辞がなければ、両者を区別できなかったため、両方を持つことはできませんでした。

new B().Method(); // calls the normal method
((IA)new B()).Method(); // calls the IA interface method
于 2010-07-19T13:32:07.740 に答える
2

お探しのドキュメントは次のとおりです:
http://msdn.microsoft.com/en-us/library/ms173157.aspx

その理由は、このケースを処理するためです。

public class C : IA, IB
{
    object IA.Method()
    { 
        // Implementation!
    } 
    object IB.Method()
    { 
        // Implementation!
    } 
}

実装したい同じ署名を持つ 2 つのメソッドがある場合、別々の実装を提供できるように、それらを異なるものにする必要があります。インターフェイスの名前がそれを提供します。

于 2010-07-19T13:35:56.670 に答える