我偶然发现了IController
并注意到它有一个方法Execute
。我的问题是,鉴于Controller
派生自实现接口ControllerBase
的{{1}},IController
如何将ControllerBase
实现为Execute
?
我的理解是接口必须作为公共方法实现。我对此的理解更加复杂,因为您无法在实例化protected virtual
上调用Execute
,而必须将其转换为Controller
的实例。
如何将接口实现为受保护的方法?
要添加更多内容,我知道明确的接口实现,但是如果您IController
ControllerBase
,则会看到该方法实现为protected virtual void Execute(RequestContext requestContext)
答案 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();