为什么显式实现的接口成员是私有的,并且与接口定义中的“公共”不一致

时间:2019-05-27 01:00:11

标签: c# oop

我是C#和OOP的新手,只是对显式接口实现提出了疑问。下面是代码:

接口定义:

interface IRun
{
   void Run();  // implicitly public
}

实现IRun的类

class Car: IRun
{
   public void Run()   // have to use public here to match Interface definition
   {
     Console.WriteLine("Run");
   }
}

因此我们知道接口的成员永远不会指定访问修饰符(因为所有接口成员都是隐式的公共和抽象),因此在Car类中,我们不能这样编码:

class Car: IRun
{
   private void Run()   //compile error, since it is public in interface, we have to math access modifiers
   {
      Console.WriteLine("Run");
   }
}

但是我不明白为什么我们将接口成员显式实现为:

class Car: IRun
{
   void IRun.Run()
   {
     Console.WriteLine("Run");
   }
}

我的教科书上说 明确实现的界面成员是自动私有的

但是访问修饰符不是不匹配吗(一个在IRun中是公共的,另一个在Car中是私有的)?为什么编译器不会抛出错误?

P.S 我可以理解,如果多个接口具有相同的方法签名,则需要使用“私有”访问修饰符来解决名称冲突。为什么访问修饰符在原始接口定义和实现中为何不相同?

0 个答案:

没有答案