[英]How is it possible to have an interface implemented as a protected method?
我偶然發現了IController
並注意到它有一個方法Execute
。 是,鑒於我的問題是Controller
派生自ControllerBase
它實現了接口IController
,它是如何ControllerBase
可以實現Execute
作為protected virtual
?
我的理解是接口必須作為公共方法實現。 我對此的理解更加復雜,因為您無法在實例化的Controller
上調用Execute
,而必須將其轉換為IController
的實例。
如何將接口實現為受保護的方法?
要添加更多內容,我知道顯式接口實現,但是如果您查看 ControllerBase
的源代碼 ,您將看到該方法實現為protected virtual void Execute(RequestContext requestContext)
它被稱為顯式接口實現。
實現接口的類可以顯式實現該接口的成員。 顯式實現成員時,不能通過類實例訪問它,而只能通過接口的實例訪問它 。
閱讀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();
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.