2010-09-04 4 views
2

Quand je lance ces 2 lignes de code que je reçois ce que je pense:Qu'est-ce qu'un délégué func?

Func<int, int> sqr = x => x * x; 
Console.WriteLine(sqr(3)); 

Mais je ne comprends pas pourquoi le retour est spécifié comme argument de 2e? Comment ça fonctionne? Lorsque vous définissez un délégué, il doit être:

return-type delegate delName (parameters); 

Cependant, délégué Func, le type de retour est également spécifié comme argument d'entrée. Quelqu'un peut-il m'expliquer comment tout cela fonctionne? Et si possible, écrivez un petit exemple en utilisant le même concept de spécification du type de retour que le paramètre d'entrée. Je trouve très difficile de comprendre ce qui se passe sous le capot.

Merci à l'avance :)

Répondre

3

La déclaration complète de System.Func vous parlez est

public delegate TResult Func<T, TResult>(T arg) 

Alors, quand vous faites

Func<int, int> sqr = x => x * x; 

Vous déclarez une méthamphétamine od en utilisant une expression lambda qui prend un int x et renvoie x * x. Donc maintenant sqr tient une référence à votre méthode. Et dans la ligne suivante

Console.WriteLine(sqr(3)); 

Vous exécutez réellement la méthode et affichez la sortie.

2

Eric Lippert a fait un bel article sur ce

Je vous encourage à lire l'article, mais l'essentiel de l'article est que la raison pour laquelle la valeur de retour apparaît à droite est que c'est la position la plus naturelle pour cela. C'est le choix naturel pour les fonctions d'anglais, de mathématiques et d'ordre supérieur. C# a le type de retour d'abord pour des raisons historiques.

Questions connexes