почему явно реализованные члены интерфейса являются частными и не согласуются с 'public в определении интерфейса - PullRequest
0 голосов
/ 27 мая 2019

Я новичок в C # и ООП, просто вопрос о явной реализации интерфейса.Ниже приведен код:

определение интерфейса:

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)?почему компилятор не выдает ошибку?

PS Я могу понять, что для разрешения конфликта имен необходим «закрытый» модификатор доступа, если несколько интерфейсов имеют одинаковую сигнатуру метода.почему модификаторы доступа не могут быть одинаковыми в исходном определении и реализации интерфейса?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...