4

偶然見つけたところIController、メソッドがあることに気付きましたExecute。私の質問は、それがインターフェイスを実装するControllerものから派生することを考えると、それはどのように実装できるのでしょうか?ControllerBaseIControllerControllerBaseExecuteprotected virtual

私の理解では、インターフェイスはパブリック メソッドとして実装する必要があります。Executeインスタンス化された を呼び出すことができずController、代わりに のインスタンスにキャストする必要があるため、これについての私の理解はさらに複雑ですIController

インターフェイスを保護されたメソッドとして実装するにはどうすればよいですか?

もう少し追加すると、明示的なインターフェイスの実装については知っていますが、atのソース コードを表示ControllerBaseすると、メソッドが次のように実装されていることがわかります。protected virtual void Execute(RequestContext requestContext)

4

1 に答える 1

7

これは、明示的なインターフェイスの実装と呼ばれます。

インターフェイスを実装するクラスは、そのインターフェイスのメンバーを明示的に実装できます。メンバーが明示的に実装されている場合、クラス インスタンスを介してアクセスすることはできず、インターフェイスのインスタンスを介してのみアクセスできます

詳細については、MSDN: Explicit Interface Implementation Tutorialを参照してください。

簡単なサンプル:

interface IControl
{
    void Paint();
}

public class SampleClass : IControl
{
    void IControl.Paint()
    {
        System.Console.WriteLine("IControl.Paint");
    }

    protected void Paint()
    {
        // you can declare that one, because IControl.Paint is already fulfilled.
    }
}

そして使用法:

var instance = new SampleClass();

// can't do that:
// instance.Paint();

// but can do that:
((IControl)instance).Paint();
于 2013-11-04T02:56:19.370 に答える