Почему явная реализация интерфейса не может быть общедоступной?
У меня есть метод в классе, который представляет собой реализацию интерфейса. Когда я это сделал Явная реализация, я получил ошибку компилятора
The modifier 'public' is not valid for this item
Почему не разрешено иметь public
для явной реализации интерфейса?
Ответы
Ответ 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();
.....
Экспериментальные реализации интерфейса интерфейса недоступны через экземпляры класса или структуры.