[英]Refactoring Implicit Interface Implementation into Explicit Interface Implementation
[英]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.