【发布时间】: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 使用“实现接口”选项创建上述代码。我可以在相关问题中看到,使用“显式”选项它不会将方法填充为公共