Diese Frage und Eric Lipperts Antwort < Ich habe mich gefragt: Wie tun entscheiden Sie, ob Sie eine explizite oder implizite Implementierung verwenden, wenn Sie Methoden einer Schnittstelle implementieren?
(persönlich) Ich sehe nur dann eine Notwendigkeit für explizite Implementierungen, wenn es einen Konflikt zwischen Methoden mit der gleichen Signatur gibt.
Wenn Sie beispielsweise IEnumerable<T>
implementieren, sollten Sie 2 Methoden GetEnumerator()
implementieren, die die gleiche Signatur haben, mit Ausnahme des Rückgabetyps. Sie müssen also IEnumerable.GetEnumerator()
explizit implementieren:
Eine andere Verwendung für eine explizite Implementierung ist, wenn Sie nicht möchten, dass die Methode über eine Objektinstanz aufgerufen wird, sondern nur über eine Schnittstelle. Ich persönlich denke, dass dies nicht viel Sinn macht, aber in einigen sehr seltenen Fällen kann es nützlich sein.
Philippes Antwort ist eine praktische, aber es gibt auch architektonische Überlegungen.
Schnittstellen werden verwendet, um Klassen kompatibel zu machen, so dass sie von anderen Objekten konsumiert werden können. Wenn nur diese konsumierenden Objekte die Funktionalität der Schnittstelle benötigen, sollte sie - nach dem Prinzip der geringsten Privilegien - eingeschränkt werden. Es wäre unnötig, diese Schnittstellenmethode allen anderen Benutzern der Klasse zugänglich zu machen.
Paul
Tags und Links c#