Der Grund für eine explizite Schnittstellenimplementierung besteht darin, Namenskollisionen zu vermeiden. Das Endergebnis ist, dass das Objekt vor dem Aufrufen dieser Methoden explizit in diese Schnittstelle umgewandelt werden muss.
Sie können sich diese Methoden nicht als öffentlich in der Klasse vorstellen, sondern als direkt an die Schnittstelle gebunden. Es gibt keinen Grund, public / private / protected anzugeben, da es immer öffentlich ist, da Schnittstellen keine nicht öffentlichen Mitglieder haben können.
(Microsoft hat einen Überblick über die explizite Schnittstellenimplementierung )
"...since it will always be public..."
;; Technisch ist dies nicht korrekt, da Sie die explizit implementierte Funktion erst von außen aufrufen können, wenn Sie das Objekt in die Schnittstelle umwandeln."Explicit interface member implementations have different accessibility characteristics than other members. Because explicit interface member implementations are never accessible through their fully qualified name in a method invocation or a property access, they are in a sense private. However, since they can be accessed through an interface instance, they are in a sense also public."
Die explizite Elementimplementierung ermöglicht die Disambiguierung von Schnittstellenmitgliedern mit derselben Signatur.
Ohne explizite Implementierungen von Schnittstellenelementen wäre es für eine Klasse oder Struktur unmöglich, unterschiedliche Implementierungen von Schnittstellenelementen mit derselben Signatur und demselben Rückgabetyp zu haben.
Warum kann die explizite Implementierung einer Schnittstelle nicht öffentlich sein? Wenn ein Mitglied explizit implementiert ist, kann nicht über eine Klasseninstanz, sondern nur über eine Instanz der Schnittstelle darauf zugegriffen werden.
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(); .....
Auf Implementierungen von expliziten Schnittstellenelementen kann nicht über Klassen- oder Strukturinstanzen zugegriffen werden.
quelle