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?
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%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.