C# – “明确实现的接口成员总是隐式私有的原因是什么?”

当我需要显式实现接口成员时,它是私有的。

例如 :

// when explicit implementation it is always private void IPointy.Draw( ) { } 

为什么要实施这样的设计规则?

注意 :

当两个接口具有相同的方法时,为了避免冲突,我必须明确地实现为

 class Line :IPointy { // Now it is private void IPointy.Draw( ) { } } 

我的问题是实施的原因是私人的。

明确实现的接口成员不仅仅是私有的。 他们是公开的 – 有点像。

它们是公开的,任何可以强制引用接口的代码都可以调用它们。 (如果界面本身不公开,那么我猜你可以说它们实际上具有与界面相同的访问级别。)

它们没有任何指定的访问级别,因为它们必须在接口方面公开:没有任何选择。 它们不是普通公共成员的公共成员,但它们可以从任何其他程序集中调用,这些程序集可以获取引用并将其强制转换为接口类型……

C#3.0规范就是这样说的:

显式接口成员实现具有与其他成员不同的可访问性特征。 因为显式接口成员实现永远不能通过方法调用或属性访问中的完全限定名来访问,所以它们在某种意义上是私有的。 但是,由于它们可以通过接口实例访问,因此它们在某种意义上也是公开的。

因为该类显式实现的2个接口可以具有相同名称的方法。 这就是为什么该方法在通过类引用访问时是私有的,而在接口时是public。

因为你说我的对象是IPointy,而不是你可以调用IPointy方法绘制。 否则没有。

  public interface IPointy { void Draw(); } public class PointyImplementer : IPointy { #region IPointy Members void IPointy.Draw() { Console.WriteLine("You have drawn"); } #endregion } class Program { static void Main(string[] args) { IPointy pi = new PointyImplementer(); pi.Draw(); Console.Read(); } } 

这是一种掩盖您正在实现的界面的方法。