Multicast-Delegat vom Typ Func (mit Rückgabewert)?

7

Ich habe den folgenden Code:

%Vor%

Die Ausgabe ist:

%Vor%

Invertieren der Summe:

%Vor%

Gibt die Ausgabe:

%Vor%

Mein erster Test wurde mit einem booleschen Rückgabetyp durchgeführt, und der zurückgegebene Wert wurde auch immer von der letzten Funktion bestimmt. Funktioniert es wie beabsichtigt? Verlieren wir nicht den Rückgabewert der anderen Funktionen? Wenn ja, gibt es in der realen Welt einen Anwendungsfall dieser Multicast-Delegierten von Funktionen?

    
David Khuu 01.06.2014, 17:37
quelle

3 Antworten

14
  

Funktioniert es wie gewünscht?

Es funktioniert mindestens wie angegeben. Ob das beabsichtigt ist oder nicht, ist eine andere Sache :) Aus Abschnitt 15.4 der C # 5-Spezifikation - Hervorhebung meiner:

  

Der Aufruf einer Delegat-Instanz, deren Aufrufliste mehrere Einträge enthält, erfolgt durch synchrones Aufrufen jeder der Methoden in der Aufrufliste der Reihe nach. Bei jeder so aufgerufenen Methode wird dieselbe Gruppe von Argumenten übergeben, die der Delegierteninstanz übergeben wurde. Wenn ein solcher Delegataufruf Referenzparameter enthält (§10.6.1.2), wird jeder Methodenaufruf mit einem Verweis auf dieselbe Variable ausgeführt. Änderungen an dieser Variablen durch eine Methode in der Aufrufliste sind für Methoden in der Aufrufliste sichtbar. Wenn der Delegataufruf Ausgabeparameter oder einen Rückgabewert enthält, wird ihr endgültiger Wert aus dem Aufruf des letzten Delegaten in der Liste stammen.

Weiter:

  

Verlieren wir nicht den Rückgabewert der anderen Funktionen?

Ja, im Moment.

  

Wenn ja, gibt es in der realen Welt einen Anwendungsfall dieser Multicast-Delegierten von Funktionen?

Sehr selten, um ehrlich zu sein. Sie können jedoch einen Multicast-Delegierten unter Verwendung von % teilen. co_de% :

%Vor%     
Jon Skeet 01.06.2014, 17:46
quelle
3

Die meisten Ihrer Fragen wurden bereits beantwortet, aber eine Sache, die noch fehlt, ist ein praktischer Anwendungsfall. Hier ist einer: asynchrone Event-Handler.

%Vor%

Dies ermöglicht dem Benutzer der Klasse, einfach

zu schreiben %Vor%

Das Objekt stellt jedoch weiterhin sicher, dass die Aufgabe von OnX erst abgeschlossen wird, wenn der Ereignishandler dies erledigt hat.

    
hvd 01.06.2014 19:39
quelle
2

Der Multicast-Delegat gibt immer das Ergebnis der letzten Funktion zurück. Weil es keine vordefinierte Möglichkeit zum Kombinieren oder Verketten der T -Ergebnisse gibt.

Wenn Sie alle Ergebnisse entlang der Kette erhalten möchten, versuchen Sie Folgendes:

%Vor%     
Xiaoy312 01.06.2014 17:50
quelle

Tags und Links