Frage

Eine Sache, die ich mit bin besorgt ist, dass ich zwei Möglichkeiten der Registrierung Delegierten Ereignisse entdeckt.

  1. OnStuff + = this.Handle;
  2. OnStuff + = new StuffEventHandler (this.Handle);

Die erste ist sauber, und es macht Sinn macht „OnStuff - = this.Handle;“ von der Veranstaltung ... Aber mit dem letzteren Fall deregistrieren, soll ich tun „OnStuff - = new StuffEventHandler (this.Handle);“? Es fühlt sich an wie ich bin nicht überhaupt etwas zu entfernen, da ich in einer anderen StuffEventHandler Referenz bin zu werfen. Hat die Veranstaltung die Delegierten durch Verweis vergleichen? Ich bin besorgt ich hier einen fiesen Speicherpool beginnen konnte. Fang mich? Ich habe nicht den Verweis auf die „neuen StuffEventHandler“ Ich zuvor registriert.

Was ist die Kehrseite der Medaille zu tun # 1?

Was ist Nutzen von # 2 zu tun?

War es hilfreich?

Lösung

Sie müssen nicht über das Halten einen Verweis auf den ursprünglich registrierten Delegierten kümmern, und Sie werden nicht einen „nasty Speicher-Pool“ beginnen.

Wenn Sie anrufen "OnStuff - = new StuffEventHandler (this.Handle);" die Entfernung Code tut nicht den Delegierten vergleichen Sie mit Bezug zu entferne: es prüft auf Gleichheit durch Verweise auf die Zielmethode (n), dass die Delegierten nennen, und entfernt die passend Delegierten aus „OnStuff“ zu vergleichen .

By the way, „OnStuff“ selbst ist ein Delegatobjekt (das Ereignis Schlüsselwort, das ich Sie in Ihrer Erklärung annehmen, haben einfach die Erreichbarkeit des Teilnehmers beschränkt).

Andere Tipps

Die Nummer eins ist nur eine Abkürzung, die die gleiche MSIL als 2. eine generieren, bei der Kompilierung Art wird es bei this.Handle schauen und die Delegierten schließen zu instanziiert. Aber man sollte nie abmelden, indem neue Verwendung.

So gibt es keinen Unterschied zwischen den 2, um nur einige syntaktische Zucker unseren Code sauberer zu machen.

Ich habe den Eindruck, dass 2 ist nur Syntax Zucker. Sie sollte genau das gleiche.

Wenn ich mich richtig erinnere, die erste Alternative ist nur syntaktischer Zucker für die zweite.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top