2009-10-19 8 views
1

Selon ma compréhension, j'interprète la signification du délégué Func comme suit. Veuillez les corriger au fur et à mesure des besoins.Délégués et expressions ASP.NET - Demande d'information

Declaration : Func<int> dg ;

1. pourrais-je interpréter comme un "délégué pointant vers une méthode qui retourne un entier ?".

Declaration : Func<int,int> delg1=r=>2*r;

* 2. Ce que je pourrais l'interpréter comme «r» est une expression lambda qui est lui-même un paramètre de un type entier étant évalué comme '2 * r' et retourne un int? . *

Comparison : Delegate and lambda expression

3. si les deux délégués et lambdas fonctionnent comme poiinters de fonction, où allons-y diffèrent ?.

Comparison : Are the following two declarations equal?

decl 1 : Func<int,int> fn=(r)=>45*r; 

decl 2 : Expression<Func<int,int>> ex = (r) => r * 10; 

4. si les deux constructions mentionnées ci-dessus servent dans le même but, Où sont-elles différentes?

Répondre

7

1) Oui, mais il serait plus précis et précis de dire "un délégué se référant à une méthode qui ne prend aucun argument et renvoie un entier".

2) Non. "R" n'est pas une expression lambda. "r" est utilisé deux fois, d'abord déclarer un paramètre formel d'une expression lambda, et la seconde en tant que partie du corps de cette expression lambda. Mais "r" n'est pas l'expression lambda. L'expression lambda est "r => 2 * r"

3) Les Lambdas et les délégués sont des choses différentes. Un lambda est la notion abstraite d'une "fonction qui fait quelque chose". Un type délégué est la notion abstraite du type de choses qui sont des méthodes qui prennent et retournent certains types. Un délégué particulier est une référence à une telle méthode. Un lambda est convertible en un type de délégué compatible, et si vous le faites, lors de l'exécution, vous obtenez une instance de délégué. Mais un lambda est également convertible en d'autres choses, comme un arbre d'expression.

4) Ils ne servent pas le même but. L'arbre d'expression est un objet qui représente le calcul mentionné dans le lambda. Le délégué est un objet qui effectue le calcul mentionné dans le lambda.

+0

+1 Brillamment expliqué - bien fait :) –

1

Les délégués et expressions ne sont pas la même chose. Les délégués sont des références fortement typées aux méthodes tandis que les expressions sont des représentations en mémoire de code qui peuvent être traitées comme des données. Une expression peut être compilée dans IL (la méthode Expression.Compile) et cela vous donnera un délégué à cette méthode nouvellement compilée. N'oubliez pas qu'une expression peut être transformée en délégué, mais qu'un délégué n'est qu'un délégué.