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


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

The modifier 'public' is not valid for this item

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

2 63

2 ответа:

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

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

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

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

без реализации элементов интерфейса 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();
.....

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