Verbindung von C#-Ereignishandlern: Delegateninferenz und explizite Delegatenverwendung
Ereignisse in C# ermöglichen eine lose Kopplung zwischen Objekten und bieten einen Mechanismus zur Behandlung externer Ereignisse. Ein häufiges Szenario umfasst das dynamische Abonnieren von Ereignissen von einem externen Objekt, bei dem Sie auf die folgende Syntaxvariante stoßen:
<code class="language-c#">[object].[event] += anEvent;</code>
oder
<code class="language-c#">[object].[event] += new EventHandler(anEvent);</code>
Beide Methoden sehen ähnlich aus, aber ein tieferes Verständnis offenbart ihre subtilen Unterschiede.
In der ersten Variante führt der Compiler eine Delegate-Inferenz durch, um anhand der bereitgestellten Funktionssignatur automatisch den geeigneten Delegate-Typ zu ermitteln. Diese vereinfachte Syntax minimiert die Coderedundanz.
In der zweiten Variante geben Sie den new
-Delegaten explizit mit dem Schlüsselwort EventHandler
an. Dieser Ansatz war die einzige Option für C# 1.0-Projekte, aber in C# 2.0 und höher wird die Delegierteninferenz zum bevorzugten Ansatz.
Wann sollte die Delegierteninferenz verwendet werden?
Für C# 2.0 und höhere Projekte wird die Delegierteninferenz empfohlen. Es ist prägnant und verbessert die Lesbarkeit des Codes.
Beispiel:
<code class="language-c#">private void Button1_Click(object sender, EventArgs e) { // 事件处理逻辑 } private void Form1_Load(object sender, EventArgs e) { Button1.Click += Button1_Click; }</code>
In diesem Beispiel bestimmt die Delegateninferenz automatisch den richtigen Button1
-Delegaten für das EventHandler
-Klickereignis.
Explizite Delegatenverwendung
Während Delegatenrückschlüsse üblich sind, kann es bei der Arbeit mit Legacy-Code oder der Durchführung von Leistungsoptimierungen manchmal erforderlich sein, Delegaten explizit anzugeben. Die explizite Verwendung von Delegaten führt jedoch häufig zu unnötiger Ausführlichkeit und sollte nur bei Bedarf verwendet werden.
Das obige ist der detaillierte Inhalt vonEventHandler-Verkabelung in C#: Delegate-Inferenz vs. explizite Delegate-Nutzung?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!