casting délégué
Je suis assez novice en c#, donc ma question est peut-être simple, mais voilà.
J'ai essayé de travailler avec les délégués, et est un peu bloqué avec ce problème.
.....
public delegate double delegateA();
public delegate double delegateB();
public static double myFunc()
{
return 0;
}
public static delegateA myTest()
{
return myFunc;
}
static void Main(string[] args)
{
delegateB myFuncDelegate;
myFuncDelegate = myTest(); //<-- Error: Cannot implicitly convert type....
}
.....
Je ne sais pas comment faire ce travail de conversion, à moins d'utiliser le même délégué en tant que type.
Mais dans mon projet, il serait plus jolie pour le délégué à avoir des noms différents (tels qu'ils existent dans différentes classes.
Espère que vous pourrez m'aider.
- Quelle est la version de C# utilisez-vous? Une variation moderne de votre code serait
Func<double>
.
Vous devez vous connecter pour publier un commentaire.
Vous ne pouvez pas convertir entre les délégués comme ça directement. Ce que vous peut faire est de faire une nouveau délégué à partir d'un existant, compatible. Donc, si vous modifiez votre code pour:
qui va travailler. (Notez que la "compatibilité" ne signifiait pas nécessairement que les signatures sont identiques à voir le langage de spécification pour les détails.)
Juste pour le rendre un peu plus clair pour les autres lecteurs, voici un simple exemple complet, qui n'a pas besoin de tous les appels de méthode.
Noter qu'il y a une exception à cette règle "pas de conversions" règle de la variance générique en C# 4. Par exemple, en C# 4 vous peut écrire:
... parce que
Action<T>
est contravariant dansT
(donc c'est effectivement déclaré queAction<in T>
). C'est un conversion de référence - il ne pas créer un nouveau délégué comme le premier exemple de ne. Cependant, ce n'est pas disponible pour le simple fait de "compatible" délégués seule génériques.Aussi, pas exactement ce que vous avez demandé sur, mais il est intéressant de noter -- cela ne fonctionne pas:
Mais ce n':
Différence étant l'exemple de chaîne est à l'aide de types de référence qui peut se convertir en un objet, alors qu'un double doit être encadrées, bloquant ainsi directement en fonte