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