Voir les quatre lignes dans la méthode ci-dessous Go():La différence entre la création de délégué implicite et explicite (avec et sans médicaments génériques)
delegate void Action<T>(T arg);
delegate void Action();
void DoSomething<T>(Action<T> action)
{
//...
}
void DoSomething(Action action)
{
//...
}
void MyAction<T>(T arg)
{
//...
}
void MyAction()
{
//...
}
void Go<T>()
{
DoSomething<T>(MyAction<T>); // throws compiler error - why?
DoSomething(new Action<T>(MyAction<T>)); // no problems here
DoSomething(MyAction); // what's the difference between this...
DoSomething(new Action(MyAction)); // ... and this?
}
Notez que l'erreur du compilateur généré par le premier appel est: Les arguments de type pour la méthode 'Action (T)' ne peuvent pas être déduits de l'utilisation. Essayez de spécifier explicitement les arguments de type.
Je ne peux pas comprendre comment cela compilerait (en vase clos): void doSomething (Action d'action) { // ...} Puisque T est pas déclaré ... Est-ce la chose à l'intérieur une classe générique? –
Oui, je modifie mon exemple maintenant. Doit avoir lu Go() {... –
Est-ce moi mais quand je compile le code que vous avez ici, il compile sans erreur.En supposant que je place le code dans une classe non générique. J'utilise C# 3.5 SP1 – JoshBerke