Eine Methode als Argument übergeben

8

Ich habe eine Methode SaveChanges<T>(T object) , die häufig in meinem Code aufgerufen wird, außer in Abhängigkeit von der Aktion, die die Methode aufruft, würde es eine andere Methode geben, die von SaveChanges aufgerufen wird. So etwas ...

%Vor%

Anwendungsbeispiele:

%Vor%

Ich habe die Delegiertenmethoden gelesen, aber ich bin ein wenig verwirrt darüber, wie ich dies mit meinen Anforderungen umsetzen kann oder ob meine Anforderungen überhaupt für Delegierte gelten.

EDIT: Könnte es auch möglich sein, mehrere Aktionen zu übergeben?

    
bflemi3 10.10.2011, 14:28
quelle

6 Antworten

10

Wie wäre es mit:

%Vor%

Genannt wie:

%Vor%

Nun, nach einem zweiten Lesen Ihrer Frage, sehe ich keinen Punkt bei der Übergabe von mlaObject , da sie nie benutzt wird.

%Vor%     
user7116 10.10.2011, 14:30
quelle
7

AKTUALISIEREN Ich war ein wenig unklar von Ihrer Frage, ob das übergebene Argument irgendwo anders in der Methode verwendet wird, es sieht nicht so aus, also können Sie einfach ein% co_de nehmen % und verwenden Sie ein Lambda, um den Delegaten anzugeben, der mit dem eingefangenen Argument aufgerufen werden soll:

%Vor%

An die Sie übergeben können:

%Vor%

Oder wenn es das myObj selbst ist, in diesem Fall (wie sechs Buchstaben-Variablen bereits beantwortet), können Sie es einfach in einem Delegaten gemäß seinem Code übergeben.

Oder, ob sich arg von mlaObject unterscheidet und Sie auch andere Dinge im Code ausführen möchten, in diesem Fall könnten Sie Folgendes tun:

%Vor%

Und dann:

%Vor%     
James Michael Hare 10.10.2011 14:30
quelle
5
%Vor%

Ich hoffe, ich habe die Frage richtig verstanden ...

    
BFree 10.10.2011 14:31
quelle
4

Ihre SaveChanges Methode würde ungefähr wie folgt aussehen:

%Vor%

Genannt wie:

%Vor%     
Jamiec 10.10.2011 14:31
quelle
0
  

wenn meine Anforderungen die Verwendung für Delegierte überhaupt rechtfertigen.

Wenn Sie möchten, dass die Methode SaveChanges eine Funktion ausführt, haben Sie zwei Möglichkeiten

  • Lassen Sie die Funktion direkt ausführen (Code in der Methode oder rufen Sie eine zweite Methode innerhalb der Methode auf); oder
  • stellt der Funktion SaveChanges die Funktion als Delegat zur Verfügung.

Wann Sie diese Optionen verwenden sollten, hängt von Ihnen ab und hängt vom Szenario, der Gesamtlösung und Ihren Vorlieben ab.

Vorteile des ersten

  • Kann jedes mögliche Ergebnis der Methode SaveChanges an einer Stelle sehen
  • Weniger verwirrend für jemanden, der nicht weiß, wie Delegierte arbeiten

Vorteile des zweiten

  • Kann jede mögliche Funktion von der Methode SaveChanges ausschließen (es ist kein enormer case oder if else if else if erforderlich)
  • Die Funktionen, die an die Methode SaveChanges übergeben werden, können darüber im Call-Stack liegen, sie müssen nicht wissen, was sie sind oder wie sie funktionieren, sie können Dinge tun, die sie nicht versteht, und sie kann wiederverwendet werden - anderswo angerufen oder als Delegierte in anderen Funktionen verwendet werden.

Ich denke, der erste Punkt ist der Hauptpunkt hier. Wenn Sie nur ein paar Szenarien behandeln, dann ist es in Ordnung, ein if else if else if zu haben, aber wenn Sie mehr als eine Handvoll Optionen bekommen und eine allgemeinere SaveChanges -Methode bevorzugen, dann psdd das Delegieren.

    
Kirk Broadhurst 10.10.2011 14:52
quelle
0
%Vor%

Ruf so:

%Vor%

Ich habe das WebObject-Bit weggelassen, da es überhaupt nicht in der Funktion verwendet wurde.

    
Bjorn Coltof 10.10.2011 14:37
quelle

Tags und Links