Perché l’implementazione esplicita di un’interfaccia non può essere pubblica?

Ho un metodo in class che è l’implementazione di Interface. Quando ho fatto l’implementazione esplicita ho ottenuto l’errore del compilatore

The modifier 'public' is not valid for this item 

Perché non è consentito avere public per l’implementazione esplicita dell’interfaccia?

Il motivo per un’implementazione esplicita dell’interfaccia è evitare collisioni di nomi con il risultato finale che l’object deve essere espressamente castato su quell’interfaccia prima di chiamare quei metodi.

Puoi pensare a questi metodi non come pubblici sulla class, ma essere legati direttamente all’interfaccia. Non vi è alcun motivo per specificare pubblico / privato / protetto poiché sarà sempre pubblico poiché le interfacce non possono avere membri non pubblici.

(Microsoft ha una panoramica sull’implementazione esplicita dell’interfaccia )

L’implementazione del membro esplicito consente la disambiguazione dei membri dell’interfaccia con la stessa firma.

Senza implementazioni dei membri dell’interfaccia di esplicitazione sarebbe imansible per una class o una struttura avere implementazioni differenti dei membri dell’interfaccia con la stessa firma e tipo di ritorno.

Perché l’implementazione esplicita di un’interfaccia non può essere pubblica? Quando un membro viene implementato esplicitamente, non è ansible accedervi tramite un’istanza di class, ma solo attraverso un’istanza dell’interfaccia.

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

Le implementazioni del membro dell’interfaccia Explict non sono accessibili tramite istanze di class o struct.