Impossible de convertir de la méthode de groupe " à la non-délégué de type 'System.Délégué". Avez-vous l'intention d'invoquer la méthode?
Je suis en train de stocker une référence de fonction dans un type Délégué pour l'utiliser plus tard.
Voici ce que j'ai fais:
class Program
{
static void Test()
{
}
static void Main(string[] args)
{
Delegate t= (Delegate)Test;
}
}
Dans ce que je reçois l'erreur suivante:
Ne peut pas convertir la méthode de groupe "Test" pour les non-délégué de type 'System.Délégué".
Avez-vous l'intention d'invoquer la méthode?
Pourquoi est-ce arrivé?
Déléguer est une classe abstraite, et non pas un type de délégué. Vous aurez besoin d'un béton de type délégué ici, l'Action est bonne.
OriginalL'auteur Arsen Zahray | 2013-03-04
Vous devez vous connecter pour publier un commentaire.
Vraiment vous ne devriez jamais utiliser le type
Delegate
pour stocker un délégué. Vous devriez être en utilisant un type spécifique de délégué.Dans presque tous les cas, vous pouvez utiliser
Action
ouFunc
que votre type de délégué. Dans ce cas,Action
est approprié:Vous pouvez techniquement obtenir une instance de
Delegate
en faisant ceci:Mais en fait, à l'aide d'un
Delegate
, par opposition à un type spécifique de délégué, commeAction
, sera difficile, car le compilateur ne sait plus ce qu'est la signature de la méthode est, de sorte qu'il ne sait pas quels paramètres doivent être transmis.OriginalL'auteur Servy
Ce que vous essayez de faire ici est de lancer le méthode de groupe
Test
à quelque chose. Conformément à la spécification, la seule fonte pour une méthode de groupe est coulée dans un type de délégué. Cela peut être fait soit de manière explicite:ou implicitement:
Cependant, comme le la documentation dit,
System.Delegate
lui-même... n'est pas un type délégué:Le compilateur détecte et se plaint.
Si vous voulez lancer une méthode de groupe à un délégué, vous devrez spécifier un type délégué avec signature compatible (dans ce cas,
Action
).OriginalL'auteur Jon