2009-11-17 4 views
3

estAction <> Vs événement action

public event Action delt =() => { Console.WriteLine("Information"); }; 

une version surchargée de

Action<int, int> delg = (a, b) => { Console.WriteLine(a + b); }; ? 

Je veux dire action <> délégué est une version surchargée de "événement d'action"?

Répondre

5

Ce n'est pas appelé une surcharge.

Fondamentalement, il existe un ensemble de types, a déclaré comme ceci:

namespace System { 
    delegate void Action(); 
    delegate void Action<T>(T a); 
    delegate void Action<T1, T2>(T1 a1, T2 a2); 
    ... 
} 

Chacun d'eux est un type différent, indépendant de tous les autres. Le compilateur sait quel type vous voulez dire lorsque vous essayez de le référencer par la présence ou l'absence de <> après le nom de type, et le nombre de paramètres de type <>.

event est une chose totalement différente, et ne joue aucun rôle dans cela. Si vous êtes confus par la différence entre l'événement et le délégué, consultez ces deux questions: 12

2

L'événement n'est pas "Action", il est appelé "delt" et il a un délégué EventHandler de type Action. Normalement, vous voudriez vos événements d'avoir une EvenHandler conforme au modèle standard de concours complet (par exemple MyHandler (expéditeur d'objet, l'argument InheritsFromEventArgs))

action et l'action <> sont des types de délégués et existent dans le cadre de l'espace de noms System.

1

Strictement parlant, ils ne sont pas équivalents. Le premier affecte un event à une fonction anonyme tandis que le second déclare une fonction anonyme. Les événements tels que les propriétés ont une signification spéciale dans le CLR et suivent un design guidelines.

Questions connexes