4

我只是偶然IController发现它有一个方法Execute。我的问题是,鉴于ControllerControllerBase哪个实现接口派生,它IController是如何ControllerBase实现Executeprotected virtual

我的理解是接口必须作为公共方法来实现。我对此的理解更加复杂,因为您不能调用Execute实例化Controller,而必须将其强制转换为IController.

如何将接口实现为受保护的方法?

再补充一点,我知道显式接口实现,但是如果您查看at的源代码ControllerBase,您会看到该方法实现为protected virtual void Execute(RequestContext requestContext)

4

1 回答 1

7

它被称为显式接口实现。

实现接口的类可以显式地实现该接口的成员。当显式实现成员时,不能通过类实例访问它,而只能通过接口的实例访问

阅读 MSDN 上的更多信息:显式接口实现教程

简单示例:

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 回答