接口的隐式和显式实现

Man*_*ani 12 .net c# 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();            
        }
    }
Run Code Online (Sandbox Code Playgroud)

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

PS:我理解接口的显式实现非常重要,它可以在我们需要仅在接口级别访问方法时使用,并且使用具有相同签名方法的两个接口.

Gis*_*shu 8

对.看起来多余.

通过自定义类型的引用和ICustomization类型的引用调用它会导致相同的行为.如果您希望以下调用具有不同的行为,那么显式实现该接口将是有意义的.

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

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