c#接口公共私有[重复]

Posted

技术标签:

【中文标题】c#接口公共私有[重复]【英文标题】:c# interface public private [duplicate] 【发布时间】:2014-09-21 21:55:38 【问题描述】:

谁能解释一个接口如何被强制实现为私有或公共的。通常当我定义一个接口时,每个方法/属性都是公共的。在示例中,使用“IEnumerable”生成公共方法“GetEnumerator()”,但使用接口“IEnumerable”时,方法“IEnumerable.GetEnumerator()”默认为私有。

public class customEnumerable<T> : IEnumerable<T>, IEnumerable


    public IEnumerator<T> GetEnumerator()
    
        throw new NotImplementedException();
    

    IEnumerator System.Collections.IEnumerable.GetEnumerator()
    
        throw new NotImplementedException();
    

谢谢!

【问题讨论】:

接口中定义的所有方法都是公共的,因为接口定义了公共契约。私有方法是一个实现细节,因此它们在接口中没有位置。 IEnumerable.GetEnumerator() 根本不是私有的,只能通过接口实例访问,这就是区别 实现接口的公共方法方式称为隐式实现,IEnumerable.GetEnumerator() 实现方式称为显式实现。请参阅 Iridium 提到的链接以获得更清晰的信息 Visual Studio 使用“实现接口”选项创建上述代码。我可以在相关问题中看到,使用“显式”选项它不会将方法填充为公共 【参考方案1】:

私有成员作为接口的一部分毫无意义,因为接口中定义的所有方法都是公共的。接口用于定义一组方法、一个角色、一个对象必须始终实现。

私有方法只是实现细节,不适合公众使用。

根据 MSDN

CLR 还允许接口包含静态方法、静态 字段、常量和静态构造函数。但是,符合 CLS 的 接口不能有任何这些静态成员,因为有些 编程语言无法定义或访问它们。实际上, C# 阻止接口定义任何静态成员。在 此外,CLR 不允许接口包含任何实例 字段或实例构造函数。

更多详情请参考:-C# Interfaces. Implicit implementation versus Explicit implementation

【讨论】:

以上是关于c#接口公共私有[重复]的主要内容,如果未能解决你的问题,请参考以下文章

单元测试私有代码[重复]

Python中的公共和私有方法[重复]

私有方法的单元测试c#[重复]

C ++ - 定义 - 私有继承[重复]

阶段1 语言基础+高级_1-3-Java语言高级_02-继承与多态_第2节 抽象类_9_接口的私有方法定义

私有继承导致c ++中的问题[重复]