Die Verwendung von Delegaten

8

Ich habe gesehen, dass dieser Delegat für benutzerdefinierte Ereignisse verwendet wird. so weit Beispiel

%Vor%

Was ich hier mache, deklariere einfach delegate und weise einen Funktionsnamen zu delegieren und rufe wie fValue("hello"); auf, wann immer es erforderlich ist.

Anstatt den GetFieldName() über den Delegaten aufzurufen, kann ich ihn direkt aufrufen. also ich will nur wissen, warum sollte ich Delegat verwenden, um Funktion wo, wie wir Funktion direkt aufrufen können .... was ist der Vorteil des Aufrufs einer Funktion durch delegieren.

Bitte sagen Sie mir, in welcher Art von Szenario die Verwendung von Delegaten außer der Ereignisbehandlung erforderlich ist. Bitte führen Sie mich mit Beispielcode und simulieren Sie eine Situation, in der ich Funktion über Delegat mit Ausnahme der Ereignisbehandlung aufrufen muss. Bitte zeigen Sie mir ein reales Leben Szenario, wo wir Funktion durch Delegat aufrufen müssen.

    
Mou 16.06.2011, 12:33
quelle

8 Antworten

2
%Vor%     
Alex F 16.06.2011, 12:40
quelle
5

Der Grund, Delegaten zu verwenden, anstatt die Funktion direkt aufzurufen, ist der gleiche Grund, warum Sie

tun %Vor%

statt

%Vor%

Mit anderen Worten: Wenn Sie eine Variable verwenden, um einen Verweis auf eine aufrufbare Entität zu halten (ein Delegat ist genau das), können Sie Code schreiben, der sein Verhalten abhängig von den übergebenen Parametern ändern kann (der Wert von der Delagate, die wir gerade passieren). Dies bedeutet flexibleren Code.

Beispiele für Code, der Delegaten verwendet, können Sie LINQ (natürlich) betrachten, aber es gibt auch das Beispiel "Delegates 101", das in jeder Sprache relevant ist: eine Liste filtern .

    
Jon 16.06.2011 12:41
quelle
1

Microsofts Tutorial-Code zu C # -Delegaten stellt einen weiteren interessanten Anwendungsfall vor. In ihrem Beispiel hat ein Objekt namens Bookstore eine Methode ProcessPaperbackBooks, die einen Buchverarbeitungs-Delegaten übernimmt und auf jedes Element in der Klasse anwendet.

Der coole Teil ist dann, wenn Sie sagen, eine Methode, die alle ISBNs aller Bücher im Laden sammelt, müssen Sie nichts in der Buchladenklasse ändern, sondern nur eine Funktion definieren, die wirkt auf Bücher und gibt diese an die ProcessPaperbackBooks-Methode weiter. Delegierte Güte wird auftreten, und Ihre neue Funktion wird auf jeden Artikel im Buchladen angewendet. Snazzy, nein?

Ссылка

    
Joe Chrysler 16.06.2011 12:57
quelle
0

Delegierte sind erstklassige Objekte. IOW Sie können auf sie verweisen, sie neu zuweisen, usw., genau wie jedes andere Objekt.

    
leppie 16.06.2011 13:01
quelle
0

Grundsätzlich jeder Ort, an dem Sie zur Laufzeit angeben können, welche Funktion aufgerufen werden soll.

Das asynchrone BeginInvoke / EndInvoke-Muster ist ein perfektes Beispiel dafür; Der Rückruf wird über einen Delegaten angegeben.

    
Sven 16.06.2011 12:41
quelle
0

Kurz gesagt: Sie können Delegaten und Event-Elemente in Kombination verwenden, um beispielsweise einer Klasse einen Event-Handler zuzuordnen, der sie vorher nicht kennt, die Button-Klasse weiß, wann sie das Click-Ereignis auslösen muss und nicht weiß intern binden Sie den Handler mybutton_Click daran.

    
Davide Piras 16.06.2011 12:42
quelle
0

Linq to objects macht umfangreiche Verwendung von Delegaten:

%Vor%

Der an die Where-Methode ( animal => animal.CanSwim ) angegebene Parameter ist ein Lambda-Ausdruck, der in einen Delegaten konvertiert wird, der auf alle Elemente in myAnimals angewendet wird.

    
spender 16.06.2011 12:42
quelle
0

Eine Stelle, an der ich Delegaten verwende, ist mein Eingabe-Handler (C #, XNA)

Ich habe einen Delegierten public void OnKeyboardPress() , den ich an verschiedene Funktionen binde, wenn bestimmte Tasten gedrückt werden.

Die Eingabe ist ein gutes Beispiel; anstatt sie abzufragen (d. h. jedes Update, das du machst, ist es schon fertig ?, du wartest darauf, dass es dich anruft) .. wie eine GUI. WPF-Ereignisse sind Delegaten.

    
The Communist Duck 16.06.2011 12:46
quelle

Tags und Links