Sollte ich Schnittstellenelemente explizit oder implizit implementieren?

8

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?

    
jasonh 03.12.2009, 18:48
quelle

3 Antworten

8

(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:

%Vor%

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.

    
Philippe Leybaert 03.12.2009, 18:50
quelle
3

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

    
Paul 03.12.2009 19:27
quelle
1

Ein weiterer Fall für explizite Schnittstellen ist, wo das Objekt eine Schnittstelle implementieren muss, um Aufrufe von einem internen Objekt zu akzeptieren, aber Sie wollen diese nicht als Teil Ihrer API verfügbar machen.

    
kyoryu 04.12.2009 04:16
quelle

Tags und Links