Подтвердить что ты не робот

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

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

The modifier 'public' is not valid for this item

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

4b9b3361

Ответ 1

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

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

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

Ответ 2

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

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

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

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();
.....

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