Für die spezifische Frage „Wird pClass Müll gesammelt werden“: Das Ereignis Abonnement hat keine Auswirkung auf die Sammlung von pClass (als Herausgeber).
Für GC im Allgemeinen (insbesondere das Ziel): es hängt davon ab, ob MyFunction statisch oder instanzbasiert ist.
Ein Delegat (z. B. eine Ereignissubskription) für eine Instanzmethode enthält einen Verweis auf die Instanz. Also ja, ein Event-Abonnement wird GC verhindern. Sobald jedoch das Objekt, das das Ereignis (pClass oben) veröffentlicht, für die Sammlung in Frage kommt, ist dies kein Problem mehr.
Beachten Sie, dass dies in eine Richtung ist; das heißt, wenn wir haben:
publisher.SomeEvent += target.SomeHandler;
dann „Publisher“ halten „Ziel“ am Leben, aber „Ziel“ nicht halten „Verlag“ am Leben.
Also nein: Wenn pClass trotzdem gesammelt wird, müssen Sie die Listener nicht abmelden. Wenn pClass jedoch langlebig war (länger als die Instanz mit MyFunction), konnte pClass diese Instanz am Leben erhalten, so dass erforderlich wäre, um sich abzumelden, wenn das Ziel erfasst werden soll.
Statische Ereignisse sind jedoch aus diesem Grund sehr gefährlich, wenn sie mit instanzbasierten Handlern verwendet werden.
Ich werde versuchsweise Lesern, die an dieser Frage interessiert sind, empfehlen, sich mit leichten Ereignissen/schwachen Ereignismustern vertraut zu machen, die NICHT verhindern, dass die Garbage Collection stattfindet. Ein gutes SO Bootstrap zu diesem Thema ist http://stackoverflow.com/questions/185931/weakreference-and-event-handling – fostandy
Hinweis für die Nachwelt: Einstellung der Verweis auf Null verzögert einfach den Garbage Collector durch eine Erweiterung um eine Zeile den Umfang von die Referenz. .NET ist nicht VB6. –