实现IEnumerable <T>和IEnumerable.GetEnumerator()不能公开,为什么?

aer*_*son 3 .net c# ienumerator enumerator

要实现接口成员,实现类的相应成员必须是公共的.source:接口(C#编程指南)

我知道它是私有的,但我想理解为什么它不公开?

必须是私有接口成员实现

Fab*_*jan 8

显式实现时,默认情况下接口方法是公共的,这就是您不能使用访问修饰符的原因.

来自msdn.com的报价:

当一个成员被显式实现时,它不能通过类实例访问,而只能通过接口的实例访问(默认情况下是公共的)

来源:https://msdn.microsoft.com/en-us/library/aa288461%28v=vs.71%29.aspx

PS隐式和显式实现之间的区别:

interface MyInterface
{
   void MyMethod();
}

class A : MyInterface  // Implicit implementation
{
   public void MyMethod () { ... }
}

class B: MyInterface   // Explicit implementation
{
   void MyInterface.MyMethod () { ... }
}
Run Code Online (Sandbox Code Playgroud)

  • 其他链接:https://msdn.microsoft.com/en-us/library/ms173157.aspx(该类实现两种不同的Paint方法的部分)和https://msdn.microsoft.com/en-us/library /aa288461(v=vs.71).aspx(`当一个成员被显式实现时,它不能通过类实例访问,`).这在.net框架中使用,例如在显式实现`IList.Count`的数组中(因此它在数组上不可见) (3认同)