c# - visual - implizite vs explizite Schnittstellenimplementierung




visual studio c# interfaces (2)

Mögliche Duplikate:
C #: Schnittstellen - Implizite und explizite Implementierung

Würde jemand die Unterschiede zwischen diesen beiden Tieren erklären und erklären, wie man sie benutzt? AFAIK, viele pre.2.0-Klassen wurden ohne generische Typen implementiert, wodurch die letztere Version beide Varianten von Schnittstellen implementiert. Ist der einzige Fall, warum man sie benutzen müsste?

Kannst du auch erklären, wie man sie benutzt?

Vielen Dank

https://code.i-harness.com


Es gibt noch eine weitere Möglichkeit, die labyrinthische Implementierung selbst zu betrachten: http://blogs.msdn.com/cbrumme/archive/2003/05/03/51381.aspx .

Kurz gesagt, implizite Implementation gibt Ihnen eine Is-A-Typ-Konvertierung, explizite Implementierung ist nicht zugänglich, es sei denn, das Objekt wird explizit in diesen Schnittstellentyp umgewandelt.


Es gibt einen guten und ziemlich detaillierten Blogeintrag dazu.

Bei impliziter Schnittstellenimplementierung greifen Sie auf die Methoden und Eigenschaften der Schnittstelle zu, als wären sie Teil der Klasse. Bei expliziten Schnittstellenimplementierungen können Sie nur auf sie zugreifen, wenn Sie sie als diese Schnittstelle behandeln.

In Bezug auf die Zeit, in der Sie eine über die andere verwenden würden, müssen Sie manchmal eine explizite Schnittstellenimplementierung verwenden, da Sie entweder eine Eigenschaft / Methode mit der gleichen Signatur wie die Schnittstelle haben oder zwei Schnittstellen mit denselben Signaturen implementieren möchten diese Eigenschaften / Methoden, die übereinstimmen.

Die folgenden Regeln stammen aus dem Brad Abrams Designrichtlinien-Blog .

  • Verwenden Sie keine expliziten Elemente als Sicherheitsgrenze. Sie können von jedem Client aufgerufen werden, der eine Instanz auf die Schnittstelle überträgt.
  • Verwenden Sie explizite Member, um Implementierungsdetails auszublenden
  • Verwenden Sie explizite Member, um Implementierungen privater Schnittstellen zu approximieren.
  • Stellen Sie eine alternative Möglichkeit bereit, auf explizit implementierte Member zuzugreifen, die von Unterklassen überschrieben werden dürfen. Verwenden Sie den gleichen Methodennamen, es sei denn, ein Konflikt würde entstehen.

Es wird auch in den Kommentaren in Brad's Blog erwähnt, dass beim expliziten Implementieren von Werttypen ein Boxing involviert ist. Beachten Sie also die Leistungskosten.





interface