Die vorangegangenen Antworten erklären, warum es sinnvoll sein kann, eine Schnittstelle explizit in C# zu implementieren bevorzugt (meist aus formalen Gründen). Es gibt jedoch eine Situation, in der eine explizite Implementierung obligatorisch : Um zu vermeiden, dass die Kapselung verloren geht, wenn die Schnittstelle nicht public
, aber die implementierende Klasse ist public
.
// Given:
internal interface I { void M(); }
// Then explicit implementation correctly observes encapsulation of I:
// Both ((I)CExplicit).M and CExplicit.M are accessible only internally.
public class CExplicit: I { void I.M() { } }
// However, implicit implementation breaks encapsulation of I, because
// ((I)CImplicit).M is only accessible internally, while CImplicit.M is accessible publicly.
public class CImplicit: I { public void M() { } }
Die oben erwähnte Leckage ist unvermeidbar, da nach der C#-Spezifikation "Alle Mitglieder der Schnittstelle haben implizit öffentlichen Zugriff". Infolgedessen müssen implizite Implementierungen auch public
Zugang, auch wenn die Schnittstelle selbst z. B. internal
.
Implizite Schnittstellenimplementierung in C# ist eine große Erleichterung. In der Praxis verwenden viele Programmierer sie die ganze Zeit/überall ohne weitere Prüfung. Dies führt im besten Fall zu unübersichtlichen Typoberflächen und im schlimmsten Fall zu undichter Kapselung. Andere Sprachen, wie z. B. F#, es nicht einmal erlauben .
0 Stimmen
Vollständigen Artikel über C#-Schnittstellen lesen : planetofcoders.com/c-schnittstellen
1 Stimmen
Ja, explizite Schnittstellen sollten vermieden werden, und ein professionellerer Ansatz wäre die Implementierung von ISP (Schnittstellentrennungsprinzip) - hier ein ausführlicher Artikel dazu codeproject.com/Artikel/1000374/
0 Stimmen
In den meisten Fällen werden Schnittstellen nicht benötigt, denken Sie darüber nach, wer Ihren Code verwendet, niemand, also verschwenden Sie keine Zeit mit dem Versuch, die besten Schnittstellen zu implementieren, Schnittstellen erhöhen nur die Komplexität des Projekts und führen zu mehr Funktionsfehlern, als es sein sollte