2009-04-08 3 views
37

Il y a quelques délégués prédéfinis en C#délégués standard en C#

Je sais que ce:

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> 

Il y a beaucoup plus pour des cas particuliers et des pièces de forme générées du cadre, mais ceux-ci sont souvent bien à utiliser dans un code écrit par soi-même.

Si vous en connaissez quelques-unes plus utiles, ajoutez-les. Sinon, ceci est répondu.

+3

Aimeriez-vous rouvrir ceci et le convertir en une page wiki communautaire. – Tarion

Répondre

23

Ils ne sont pas prédéfinis en C#. Ils sont définis par le cadre .

Les Action et Func familles de délégués sont plus larges que vous avez montré - ils vont jusqu'à

Action<T1, T2, T3, T4> 

et

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

Un autre commune-ish dans .NET 2.0 pour la manipulation de la liste (avant LINQ) est Predicate<T>.

Pour travailler avec des fils:

ThreadStart 
ParameterizedThreadStart 
WaitCallback 
TimerCallback 
AsyncCallback 
+0

Cela vous rend étonnant. Si les génériques et Func/Action étaient disponibles en version 1.0, aurions-nous d'autres types de délégués? – JaredPar

+0

C'est une question intéressante. Je préfère prédicat comme un nom plus significatif que Func par exemple - si ce n'était pas pour les surcharges de Où etc pour prendre Func ce serait un meilleur ajustement pour LINQ. Spécifier des arguments de type partout peut nuire à la lisibilité. –

2

Goto Reflector Rechercher System.MulticastDelegate et vérifiez les types dérivés. Vous obtiendrez la liste de tous les délégués que vous recherchez.

+0

Eh bien, cela donne une liste complète des délégués. Il ne donne pas les plus utiles ou les plus importants, ce que le PO était après je pense. –

3

J'aime utiliser Predicate<T> ce qui équivaut à Func<T, bool>

0

J'utilise WaitCallback et ThreadStart assez souvent pour eux d'obtenir une mention.

Si vous connaissez la signature du délégué que vous êtes après, mais vous ne savez pas s'il y a un existant délégué avec cette signature que vous pouvez utiliser, vous pouvez suivre these instructions sur mon blog pour trouver un .

+0

Le lien semble ne plus être valide. –

0

System.Windows.ValidateValueCallback qui représente une méthode utilisée en tant que rappel qui valide la valeur effective d'une propriété de dépendance.

En savoir plus: MSDN: ValidateValueCallback Delegate

1

J'ai aussi rencontré

Comparison<T> 

dans la méthode générique

List.Sort(Comparison<T>) 

. Je suppose que ceci est maintenant équivalent à:

Func<T1, T2, int> 
Questions connexes