接口的隐式和显式实现
在进行升级时,碰巧碰到了这样的代码。
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[
或] ICloneable
类的东西是常见的)。 - 我们不希望它是
public
,但我们希望它在类型中可以轻松调用(不需要nop-cast)
在这种情况下,它确实看起来多余。