Alors, pour en savoir plus, il faut se documenter sur les delegate
Un delegate est caractérisé par une signature de fonction. Par exemple :
1 2 3 4 5 6 7 8 9 10 11 12
| // on définit un type délégué, que l'on nomme XYZ
delegate void MonTypeDelegue(int i);
class A
{
public void UneMethode(int x) { ... }
public void UneAutreMethode(string s) { ... }
void f()
{
MonTypeDelegue x = this.UneMethode; // ok, parce que UneMethode a la bonne signature
MonTypeDelegue y = this.AutreMethode; // pas OK, la méthode a pas la bonne signature
}
} |
En plus, les delegate permettent d'utiliser les generics : tu peux donc écrire
delegate void MonTypeDelegue<T>(T arg1, string arg2);
par exemple.
Au dessus, j'avais utilisé Converter<T, U> parce que c'est un type de délégué déjà défini dans le framework.
Pourquoi ce genre de truc ne fonctionne pas ? :
Parce que le compilo doit savoir statiquement si l'appel "return methode(argument)" est correct : pour ça, il faut que ta méthode de type V prenne un argument de type T et renvoie un U. Ce qui n'est le cas que si on dit au compilo que la méthode a pour signature "U methode(T arg)".
Partager