簡體   English   中英

接口的隱式和顯式實現

[英]Implicit and Explicit implementation of interface

在進行升級時,碰巧碰到了這樣的代碼。

interface ICustomization
    {
        IMMColumnsDefinition GetColumnsDefinition();
    }

    class Customization : ICustomization
    {
        private readonly ColumnDefinition _columnDefinition;

        //More code here.

        public ColumnsDefinition GetColumnsDefinition()
        {
            return _columnDefinition;
        }

        ColumnsDefinition ICustomization.GetColumnsDefinition()  //redundant
        {
            return GetColumnsDefinition();            
        }
    }

我的問題是:在這段代碼中是否需要/使用“顯式”接口實現? 如果我刪除上面標記為“冗余”的方法(顯式實現接口)會不會產生任何問題?

PS:我理解接口的顯式實現非常重要,當我們需要僅在接口級別訪問方法時,可以使用它,並且使用具有相同簽名方法的兩個接口。

對。 看起來多余。

通過自定義類型的引用和ICustomization類型的引用調用它會導致相同的行為。 如果您希望以下調用具有不同的行為,那么顯式實現該接口將是有意義的。

Customization oVar = new Customization();
oVar.GetColumnsDefinition(); // calls 1st method
ICustomization iVar = obj;
iVar.GetColumnsDefinition(); // calls 2nd method - explicit impl.

您應該刪除顯式實現。 但是,如果刪除其他實現,則會限制客戶端,使其無法再調用oVar.GetColumnsDefintion() - 它們必須使用如上所示的接口變量。

有關信息,您看到特定模式的主要時間是(任何一個):

  • 非顯式方法是virtual方法或abstract方法,用於子類override
  • 所述的簽名public方法是不太一樣,例如公共API有更特定的返回類型(共同的東西等IEnumerable[<T>]ICloneable )。
  • 我們不希望它是public ,但我們希望它在類型中可以輕松調用(不需要nop-cast)

在這種情況下,它確實看起來多余。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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