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

7 c#

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

例如 :

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

  {

  }
Run Code Online (Sandbox Code Playgroud)

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

注意 :

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

class Line :IPointy
{

       // Now it is private    
       void IPointy.Draw( )

      {


      }

}
Run Code Online (Sandbox Code Playgroud)

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

Jon*_*eet 19

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

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

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

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

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


Ars*_*yan 0

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