2009-04-08 20 views
37

Hay algunos delegados predefinidos en C#delegados estándar en C#

Sé que estos:

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> 

Hay muchos más para casos especiales y piezas de formulario generados del marco, pero a menudo son buenos para uso en código auto escrito

Si conoces algo más útil agrégalo. De lo contrario, esto se responde.

+3

Me gustaría volver a abrir esto y convertirlo a una página wiki de la comunidad. – Tarion

Respuesta

23

No están predefinidos en C#. Están definidos por el framework.

Los Action y Func familias de delegados son más anchos que has demostrado - que van hasta

Action<T1, T2, T3, T4> 

y

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

Otro común-ish en .NET 2.0 para la manipulación lista (antes de LINQ) es Predicate<T>.

Para trabajar con hilos:

ThreadStart 
ParameterizedThreadStart 
WaitCallback 
TimerCallback 
AsyncCallback 
+0

Sin embargo, te hace pensar. Si los genéricos y Func/Action estuvieran disponibles en 1.0, ¿tendríamos algún otro tipo de delegado? – JaredPar

+0

Es una pregunta interesante. Prefiero Predicate como un nombre más significativo que Func por ejemplo - si no fuera por las sobrecargas de Where etc para tomar Func sería una mejor opción para LINQ. Especificar los argumentos de tipo en todas partes puede perjudicar la legibilidad. –

2

Ir a Reflector Buscar System.MulticastDelegate y comprobar los tipos derivados. Obtendrás la lista de todos los Delegados que estás buscando.

+0

Bueno, eso da una lista completa de delegados. No da los más útiles o importantes, que es lo que fue el OP después de que pienso. –

3

me gusta usar Predicate<T> lo que equivale a Func<T, bool>

0

utilizo WaitCallback y ThreadStart con la suficiente frecuencia para que puedan obtener una mención.

Si conoce la firma del delegado que está buscando, pero no saben si hay una delegado existente con esa firma que se puede utilizar, puede seguir these instructions en mi blog para encontrar uno .

+0

El enlace parece no ser válido más. –

0

System.Windows.ValidateValueCallback que representa un método utilizado como una devolución de llamada que valida el valor efectivo de una propiedad de dependencia.

Leer más: MSDN: ValidateValueCallback Delegate

1

También he encontrado

Comparison<T> 

en el método genérico

List.Sort(Comparison<T>) 

. Supongo que esto ahora es equivalente a:

Func<T1, T2, int>