2011-06-29 3 views
5

Je viens de voir un brand-new video sur le cadre Rx et une signature particulière a attiré mon attention:Que signifie Action <Action>?

Scheduler.schedule(this IScheduler, Action<Action>) 

A 23h55, Bart de Smet dit:

La première version serait action d'action.

Si Action est un type paramétré, comment peut-il apparaître de nouveau non paramétré dans les angles? Ne devrait-il pas être Action<Action<Action<...>>> ad infinitum, ce qui est évidemment impossible?

+10

est pas là un 'Action' type non générique ainsi? Cela expliquerait :) – jalf

+3

aww, maintenant je me sens stupide Je n'ai pas fait une réponse – jalf

+3

Si vous voulez vraiment un type qui fait cuire votre nouille, jouez avec "délégué D D (D d);" pour un peu et voir ce que vous pouvez faire. –

Répondre

3

Action a plusieurs surcharges. L'un est non générique, les autres prennent un, deux, trois, etc. Supposons qu'ils aient des noms différents, la version à un argument étant appelée Action1, et l'argument zéro (non générique) étant appelé Action0, alors l'exemple serait Action1<Action0>.

+0

@pst Veuillez faire attention à l'avenir lorsque vous éditerez les réponses d'autres personnes Vous avez effacé la moitié de mon texte –

+0

Si le texte a été supprimé, il s'agit d'un échec simultané de la part de SO (concurrence optimiste Je suis désolé pour le dérangement –

+0

SO est optimiste quant au soin apporté par ses utilisateurs Apparemment trop optimiste –

-1

Le paramètre par défaut semble être la solution facile ici.

+0

Paramètre par défaut de quoi ...? :( –

1

De MSDN:

Exemple d'action

Action showMethod =() => { Console.WriteLine("Line"); }; 

showMethod(); 

action < T> exa mple

Action<int> showMethod = (i) => { Console.WriteLine("Line {0}", i); }; 

showMethod(1); 
0

action a une version non générique avec la signature:

public delegate void Action(); 

Il est une action qui prend une action de type void. Ça a l'air marrant, mais c'est parfaitement valable.

+0

C'est une action qui prend un paramètre de type Action, pas une action qui renvoie une action. Un exemple serait: Action doSomething = (someMethod) => someMethod(); – bdowden

+0

dbowden, en réalité votre exemple serait une action plutôt que l'action non générique. Pour faire votre exemple dans la version non générique, changez-le en Action doSomething =() => someMethod(); –

+0

@bdowden, vous avez raison, j'ai mes mots mélangés. J'ai édité le post, merci. – jscharf