2009-04-08 17 views
37

Ci sono alcuni delegati predefiniti in C#delegati standard in C#

So che queste:

EventHandler // Default event callbacks 
EventHandler<T> // Default event callbacks with custom parameter (inheriting from EventArgs) 
Action // Function without return value and without parameter 
Action<T1, T2, T3, T4> // Function without return value and 1-4 parameters 
Func<T1, T2, T3, T4, TResult> // Methos with 0-4 parameters and one result type 
Predicate<T> // equivalent to Func<T, bool> 

Ci sono molti di più per i casi particolari e le parti modulo generato del quadro, ma questi sono spesso bene usare nel codice scritto da sé.

Se ne sai qualcosa di più utile aggiungili. Altrimenti questa è una risposta.

+3

Vorrei riaprire questo e convertirlo in una pagina wiki della comunità. – Tarion

risposta

23

Non sono predefiniti in C#. Sono definiti dalla struttura .

Le famiglie Action e Func delegato sono più larghe di quanto tu hai mostrato - vanno fino a

Action<T1, T2, T3, T4> 

e

Func<T1, T2, T3, T4, TResult> 

Un altro comune-ish in .NET 2.0 per la manipolazione lista (prima di LINQ) è Predicate<T>.

Per lavorare con le discussioni:

ThreadStart 
ParameterizedThreadStart 
WaitCallback 
TimerCallback 
AsyncCallback 
+0

Ti fa però meravigliare. Se generici e Func/Action fossero disponibili in 1.0, avremmo altri tipi di delegati? – JaredPar

+0

È una domanda interessante. Mi piace piuttosto Predicate come un nome più significativo di Func per esempio - se non fosse per gli overload di Where etc a prendere Func sarebbe meglio adattarsi a LINQ. Specificare argomenti di tipo ovunque può danneggiare la leggibilità. –

2

Goto Reflector Cerca System.MulticastDelegate e controllare i tipi derivati. Otterrai un elenco di tutti i delegati che stai cercando.

+0

Bene, questo fornisce un elenco completo dei delegati. Non dà quelli più utili o importanti, che è ciò che l'OP era dopo credo. –

3

Mi piace usare Predicate<T> che equivale a Func<T, bool>

0

Io uso WaitCallback e ThreadStart spesso sufficiente per loro di ottenere una menzione.

Se si conosce il firma del delegato che stai dopo, ma non so se c'è un delegato esistente con quella firma che è possibile utilizzare, è possibile seguire these instructions sul mio blog per trovare uno .

+0

Il collegamento sembra non essere più valido. –

0

System.Windows.ValidateValueCallback che rappresenta un metodo utilizzato come callback che convalida il valore effettivo di una proprietà di dipendenza.

Per saperne di più: MSDN: ValidateValueCallback Delegate

1

ho anche incontrato

Comparison<T> 

nel metodo generico

List.Sort(Comparison<T>) 

. Suppongo che ora sia equivalente a:

Func<T1, T2, int>