2008-11-14 6 views

Antwort

4

generisch, eine Delegierten ist ein Objekt verwendet, um ein Verfahren außerhalb des Objekts, um das Verfahren zu besitzen, während ein Rückruf ist eine Variable, die einen Delegierten

in C# enthält, werden die Begriffe synonym

15

verwendet (Ich nehme an, Sie sprechen über .NET hier. Wenn nicht, bitte erarbeiten.)

Delegierte sind die idiomatische Möglichkeit Callbacks in .NET zu implementieren - aber Sie müssen nicht. Sie könnten zum Beispiel eine Schnittstelle verwenden. (Insbesondere könnten Sie dann einen Callback mit einer Methode haben, um einen Fehler aufzurufen, und einen mit Erfolg. Natürlich könnten Sie statt dessen zwei Delegierte nehmen ...)

Es gibt viele Anwendungen für Delegierte jenseits von Rückrufen in. NET - es hängt genau davon ab, was Sie für einen Callback halten, aber GUI Event-Handler, Thread-Starter, Filter und Projektionen (und mehr!) In LINQ to Objects verwenden alle Delegaten.

4

Sie sind Hand in Hand bezogen. Ein Delegierter ist die Beschreibung, wie die Callback-Funktion wie folgt aussieht:

delegate void MyDelegate(string Text); 

Dann können Sie eine Funktion haben, die in den Rückruf als Parameter nehmen.

//This will result in a MessageBox with "Lalalala" 
MyFunctionThatGetsTheCallbackFunctionRef(MyCallBackFunc); 

void MyFunctionThatGetsTheCallbackFunctionRef(MyDelegate TheFunction){ 
TheFunction("Lalalala"); 
} 

void MyCallBackFunc(string Text){ 
    //my callback 
    MessageBox.Show(Text); 
} 
+10

Guter Job, den Sie "Ref" in 'MyFunctionThatGetsTheCallbackFunctionRef' abgekürzt haben ... Ich möchte nicht, dass der Name zu lang ist !! – EvilGeniusJamie

31

A „Rückruf“ ist ein Begriff, der auf ein Codierungsdesignmuster, in jeder Sprache bezieht, die Funktionszeiger hat, oder einen Analog-Funktionszeiger (was irgendwie ist, was ein delegieren ist)

In diesem Muster übergeben Sie einen Zeiger auf eine Funktion an eine andere Funktion, so dass sie innerhalb der aufgerufenen Funktion die Funktion, die Sie übergeben haben, "zurückrufen" kann. Auf diese Weise können Sie einen großen Teil des internen Verhaltens einer Methode von außerhalb der Methode steuern, indem Sie bei jedem Aufruf Zeiger auf verschiedene "Callback" -Funktionen übergeben ... Ein Beispiel für einen Callback ist, wenn Sie einen Sortieralgorithmus haben Diesem muss ein Zeiger auf eine Funktion übergeben werden, die irgendein beliebiges Objektpaar in der zu sortierenden Liste "vergleicht", um zu bestimmen, was vor dem anderen geht. Bei einem Aufruf der Sortiermethode übergeben Sie möglicherweise eine Rückruffunktion, die nach Objektnamen vergleicht, und eine andere Zeit eine Funktion, die nach Objektgewicht oder sonstwie vergleicht.

Ein Delegat, otoh, ist eine bestimmte. Net-Typ, der als ein signaturspezifischer Container für einen Funktionszeiger fungiert ... In .Net verwaltetem Code sind Delegaten die einzige Möglichkeit, einen Funktionszeiger zu erstellen und zu verwenden. Also in .Net, um einen Rückruf durchzuführen, übergeben Sie tatsächlich einen Delegierten ... Aber Delegaten können in anderen Szenarien als Callbacks verwendet werden. (Insbesondere können Delegaten auch zum Implementieren von Multithreading aus dem .Net-Thread-Pool verwendet werden)

Callbacks werden auch zum Implementieren des "Observer" -Musters (implementiert in .NET mithilfe von Ereignissen, die selbst eine spezielle Art von. sind) verwendet Delegierter)