2013-07-26 1 views
22

Das mag eine dumme Frage scheinen, aber es ist nur aus Neugier.Delegierte vs Aktion, Func in C#

Wir haben zwei besondere bereits definierte Delegierten in C#:

Aktion jede "Leere" Methode kapselt, die 0 oder mehr Parameter verwendet.
Func kapselt any Methode, die einen bestimmten Werttyp zurückgibt und 0 oder mehr Parameter verwendet.

Meine Frage ist: In welchen Fällen ist es empfehlenswert, einen benutzerdefinierten Delegaten zu definieren?
Warum sollten Sie das tun?

Vielen Dank im Voraus

+0

Delegierte gab es vor Func und Action und in vielerlei Hinsicht dienen sie als Rückwärtskompatibilität Geräte. Es gibt jedoch Fälle, in denen Sie nicht herumkommen, sondern Ihren Delegierten erstellen können. –

+1

Watch this http://www.youtube.com/watch?v=8o0O-vBS8W0 Kann nützlich sein. – RahulD

Antwort

38

Keiner der Func oder Action Typen ermöglichen out oder ref Parameter, so dass Sie Ihre eigenen Delegierten haben zu definieren, wenn Sie diese zB verwenden müssen:

public delegate bool TryParse<T>(string s, out T value); 
+1

Ja, das ist ziemlich logisch. Ich weiß nicht, ob das deine Absicht war, aber du hast mir gerade klar gemacht, dass Action und Func auch keine Typparameter zulassen.
Vielen Dank! – anfri

+0

Sie haben zwei Rückgabetypen in Ihrem Delegaten. Ich denke du meintest: öffentlicher Delegierter ** bool ** TryParse (string s, out T value); Ich wünschte, ich könnte es bearbeiten, aber die 6-Zeichen-Regel gilt immer noch. – user886079

+0

@ user886079 - Ja meinte ich 'bool', danke. – Lee

2

In In tausend Fällen müssen Sie auf eine Funktion verweisen/zeigen (daher ein Delegat, wenn die tatsächliche Implementierung der Funktion zur Laufzeit variiert, mit Ausnahme der Signatur), der keiner der angegebenen Delegierten entspricht. Sprich

Öffentlicher Delegierter T MyDel (T t, U u, V v);

+0

Sie haben absolut Recht. Danke, Mann! – anfri