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