簡體   English   中英

如何將接口實現為受保護的方法?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM