Frage

An welchen Orten in der realen Welt sind Delegierte gefragt?Ich bin gespannt, welche Situationen oder Muster vorliegen, bei denen diese Methode die beste Lösung ist.Kein Code erforderlich.

War es hilfreich?

Lösung

Ein Delegat ist ein benannter Typ, der eine bestimmte Art von Methode definiert.So wie eine Klassendefinition alle Mitglieder für die bestimmte Art von Objekt, die sie definiert, anordnet, legt der Delegat die Methodensignatur für die Art von Methode fest, die er definiert.

Basierend auf dieser Anweisung ist ein Delegat ein Funktionszeiger und definiert, wie diese Funktion aussieht.

Ein großartiges Beispiel für eine reale Anwendung eines Delegaten ist die Prädikat.Im Beispiel aus dem Link werden Sie das bemerken Array.Find Verwendet das Array zum Durchsuchen und dann ein Prädikat, um die Kriterien für das zu verarbeiten, was gefunden werden soll.In diesem Fall übergibt es eine Methode ProductGT10, die mit der Prädikatsignatur übereinstimmt.

Andere Tipps

Wie angegeben in „C# 3.0 lernen:Beherrschen Sie die Grundlagen von C# 3.0“

Allgemeines Szenario: Wenn ein Staatsoberhaupt stirbt, hat der Präsident der Vereinigten Staaten normalerweise keine Zeit, persönlich an der Beerdigung teilzunehmen.Stattdessen entsendet er einen Delegierten.Oft ist dieser Delegierte der Vizepräsident, aber manchmal ist der Vizepräsident nicht verfügbar und der Präsident muss jemand anderen, wie den Außenminister oder sogar die First Lady, schicken.Er will seine delegierte Autorität an eine einzelne Person nicht „hardwire“;Er könnte diese Verantwortung an jeden delegieren, der das richtige internationale Protokoll ausführen kann.

Der Präsident definiert im Voraus, welche Verantwortung delegiert wird (besuchen die Beerdigung), welche Parameter übergeben werden (Beileid, freundliche Wörter) und welchen Wert er zurückkehren will (guter Wille).Anschließend weist er dieser delegierten Verantwortung zur „Laufzeit“ eine bestimmte Person zu, wenn der Verlauf seiner Präsidentschaft fortschreitet.

Im Programmierszenario: Sie stehen häufig mit Situationen konfrontiert, in denen Sie eine bestimmte Aktion ausführen müssen, aber Sie wissen nicht im Voraus, welche Methode oder sogar welches Objekt Sie anrufen sollten, um sie auszuführen.

Zum Beispiel: Eine Schaltfläche weiß möglicherweise nicht, welches Objekt oder welche Objekte benachrichtigt werden müssen.Anstatt die Taste an ein bestimmtes Objekt zu verkabeln, verbinden Sie die Schaltfläche mit einem Delegierten und lösen diesen Delegierten an eine bestimmte Methode, wenn das Programm ausgeführt wird.

Eine häufige Verwendung von Delegaten für generische Listen ist die Verwendung von Aktionsdelegaten (oder deren anonymem Äquivalent), um eine einzeilige foreach-Operation zu erstellen:

myList.Foreach( i => i.DoSomething());

Ich finde den Prädikat-Delegaten auch sehr nützlich beim Durchsuchen oder Bereinigen einer Liste:

myList.FindAll( i => i.Name == "Bob");    
myList.RemoveAll( i => i.Name == "Bob");

Ich weiß, dass Sie gesagt haben, dass kein Code erforderlich ist, aber ich finde es einfacher, seinen Nutzen durch Code auszudrücken.:) :)

Das Binden von Ereignissen an Event-Handler ist normalerweise Ihre erste Einführung in Delegaten. Möglicherweise wissen Sie nicht einmal, dass Sie sie verwenden, da der Delegat in der EventHandler-Klasse eingeschlossen ist.

Wenn Sie wissen möchten, wie das Delegate-Muster in realem Code verwendet wird, sind Sie bei Cocoa unter Mac OS X genau richtig.Cocoa ist Apples bevorzugtes UI-Toolkit für die Programmierung unter Mac OS X und ist in Objective C codiert.Es ist so konzipiert, dass jede UI-Komponente durch Delegation und nicht durch Unterklassen oder andere Mittel erweitert werden soll.

Für weitere Informationen empfehle ich, sich anzusehen, was Apple über Delegierte zu sagen hat Hier.

Ich hatte ein Projekt, das Win32 Python verwendete.

Aus verschiedenen Gründen verwendeten einige Module odbc.py für den Zugriff auf die Datenbank, andere Module pyodbc.py.

Es gab ein Problem, wenn eine Funktion von beiden Modultypen verwendet werden musste.Als Argument wurde ihm ein Verbindungsobjekt übergeben, aber dann musste es wissen, ob es dbi.dbiDate oder datetime zur Darstellung von Zeiten verwenden sollte.

Dies lag daran, dass odbc.py als Werte in SQL-Anweisungen Datumsangaben wie dbi.dbiDate erwartete, während pyodbc.py Datums-/Uhrzeitwerte erwartete.

Eine weitere Komplikation bestand darin, dass die von odbc.py und pyodbc.py erstellten Verbindungsobjekte es nicht erlaubten, zusätzliche Felder festzulegen.

Meine Lösung bestand darin, die von odbc.odbc(...) und pyodbc.pyodbc(...) zurückgegebenen Verbindungsobjekte in eine Delegatklasse zu packen, die die gewünschte Zeitdarstellungsfunktion als Wert eines zusätzlichen Felds enthält und delegiert alle anderen Feldanforderungen an das ursprüngliche Verbindungsobjekt.

Ich hatte die gleiche Frage wie Sie und bin auf dieser Website nach einer Antwort gesucht.

Anscheinend habe ich es nicht besser verstanden, obwohl ich die Beispiele in diesem Thread überflogen habe.

Ich habe jetzt eine großartige Verwendung für Delegierte gefunden, als ich Folgendes gelesen habe: http://www.c-sharpcorner.com/UploadFile/thiagu304/passdata05172006234318PM/passdata.aspx

Für neue Benutzer mag dies offensichtlicher erscheinen, da die Übergabe von Werten in Forms viel komplizierter ist als bei ASP.NET-Websites mit POST/GET (QueryString).

Grundsätzlich definieren Sie einen Delegaten, der übernimmt "Textfeld Text" als Parameter.

// Form 1

// Class Property Definition
public delegate void delPassData(TextBox text);


// Click Handler
private void btnSend_Click(object sender, System.EventArgs e)
{
     Form2 frm= new Form2();
     delPassData del=new delPassData(frm.funData);
     del(this.textBox1);
     frm.Show();
}

// ZUSAMMENFASSUNG:Definieren Sie den Delegaten, instanziieren Sie die neue Form2-Klasse, weisen Sie dem Delegaten die Funktion funData() zu und übergeben Sie Ihre TextBox an den Delegaten.Zeigen Sie das Formular an.

// Form2

public void passData(TextBox txtForm1)
{

     label1.Text = txtForm1.Text;
}

// ZUSAMMENFASSUNG:Nehmen Sie einfach TextBox txtForm1 als Parameter (wie in Ihrem Delegaten definiert) und weisen Sie dem Text von textBox Beschriftungstext zu.

Ich hoffe, dass dies die Verwendung für Delegierte aufklärt :) ..

Eine schnelle Google-Suche ergab dies http://en.wikipedia.org/wiki/Delegation_pattern .Grundsätzlich delegieren Sie immer dann, wenn Sie ein Objekt verwenden, das seine Aufrufe an ein anderes Objekt weiterleitet.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top