c# - 接口(interface)的隐式和显式实现

标签 c# .net 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();            
        }
    }

我的问题是: 在这段代码中是否需要/使用接口(interface)的“显式”实现? 如果我删除上面标记为“冗余”的方法(接口(interface)的显式实现),它会产生任何问题吗?

PS:我明白接口(interface)的显式实现非常重要,当我们只需要在接口(interface)级别访问一个方法,并且使用两个具有相同方法签名的接口(interface)时,可以使用它。

最佳答案

是的。看起来多余。

通过 Customization 类型的引用和 ICustomization 类型的引用调用它会导致相同的行为。如果您希望以下调用的行为有所不同,那么显式实现该接口(interface)是有意义的。

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

您应该删除显式实现。但是,如果您删除其他实现,您将限制客户端,使它们无法再调用 oVar.GetColumnsDefintion() - 它们将必须使用如上所示的接口(interface)变量。

关于c# - 接口(interface)的隐式和显式实现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2756520/

相关文章:

c# - 我无法使用 wpf 设置 Web 文本框值

c# - 正确使用 DialogResult

c# - 泛型和实现 IComparable

c# - 传递给静态方法的实例引用参数会被垃圾收集吗?

c# - 在 C# 中,如果我的对象支持该接口(interface),我如何检查 T 是否属于 IInterface 类型并强制转换为该类型?

c# - 从 C++ DLL 中编写的 C++ 方法返回数据到 C#

使用 RhinoMocks 的 C# 模拟 Request.Browser.MajorVersion

c# - 如何对读取输入并写入控制台的控制台程序进行单元测试

Java ORM : Multiple (interface) inheritance

java - 既然jdbc是一个接口(interface),我们如何在jdbc中使用prepare语句