Я новичок в 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 Я могу понять, что для разрешения конфликта имен необходим «закрытый» модификатор доступа, если несколько интерфейсов имеют одинаковую сигнатуру метода.почему модификаторы доступа не могут быть одинаковыми в исходном определении и реализации интерфейса?