Почему явная реализация интерфейса не может быть публичной? - PullRequest
67 голосов
/ 10 августа 2009

У меня есть метод в классе, который является реализацией интерфейса. Когда я сделал это явной реализацией, я получил ошибку компилятора

The modifier 'public' is not valid for this item

Почему недопустимо иметь public для явной реализации интерфейса?

Ответы [ 2 ]

65 голосов
/ 10 августа 2009

Причина явной реализации интерфейса состоит в том, чтобы избежать конфликтов имен, в результате чего перед вызовом этих методов объект должен быть явно приведен к этому интерфейсу.

Вы можете думать, что эти методы не являются общедоступными для класса, а связаны непосредственно с интерфейсом. Нет смысла указывать public / private / protected, поскольку он всегда будет общедоступным, так как интерфейсы не могут иметь непубличных членов.

(у Microsoft обзор явной реализации интерфейса )

27 голосов
/ 10 августа 2009

Реализация элемента explict позволяет устранить неоднозначность члены интерфейса с одинаковой подписью.

Без явных реализаций элементов интерфейса для класса или структуры было бы невозможно иметь разные реализации элементов интерфейса с одинаковой сигнатурой и типом возврата.

Почему явная реализация интерфейса не может быть публичной? Когда член явно реализован, к нему нельзя получить доступ через экземпляр класса, а только через экземпляр интерфейса.

public interface IPrinter
{
   void Print();
}
public interface IScreen
{
   void Print();
}

public class Document : IScreen,IPrinter
{
    void IScreen.Print() { ...}
    void IPrinter.Print() { ...} 
}

.....
Document d=new Document();
IScreen i=d;
IPrinter p=d;
i.Print();
p.Print();
.....

Реализованные реализации членов интерфейса недоступны через экземпляры классов или структур.

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