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#接口公共私有[重复]的主要内容,如果未能解决你的问题,请参考以下文章