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

时间:2013-11-04 02:50:07

标签: c# asp.net-mvc interface

我偶然发现了IController并注意到它有一个方法Execute。我的问题是,鉴于Controller派生自实现接口ControllerBase的{​​{1}},IController如何将ControllerBase实现为Execute

我的理解是接口必须作为公共方法实现。我对此的理解更加复杂,因为您无法在实例化protected virtual上调用Execute,而必须将其转换为Controller的实例。

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

要添加更多内容,我知道明确的接口实现,但是如果您IController ControllerBase,则会看到该方法实现为protected virtual void Execute(RequestContext requestContext)

1 个答案:

答案 0 :(得分: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();