Ceci est un exemple artificiel: dans mon exemple ci-dessus, j'essaie d'appeler une méthode d'extension attribuée à une interface de ma classe dérivée. Le compilateur échoue ici et dit que MyMethod n'existe pas dans le contexte actuel. J'ai toutes les déclarations appropriées en utilisant mon fichier CS, donc je ne suis pas sûr de ce qui se passe. P> p>
4 Réponses :
Essayez de l'appeler comme Ceci code>:
Cela l'a fait. Merci. Je supposais que ça "ça". n'était pas nécessaire car je m'attendais à ce que cela fonctionne comme une autre fonction normale provenant d'une classe de base.
@ROBERT Dailey, les méthodes d'extension nécessitent toujours une instance pour les invoquer et dans le contexte de la classe, ils sont déclarés dans ce cas, c'est Ceci code>. C'est juste un inconvénient mineur i> qui ne peut pas comparer à tous les avantages que vous obtenez d'eux :-)
Mauvaises méthodes d'extension ne nécessitent pas d'instance pour les exécuter, car ce sont des méthodes statiques. Vous pouvez invoquer une méthode d'extension en tant que statique en lui transmettant des paramètres. Cependant, "base" n'est pas une valeur de paramètre valide pour le paramètre marqué de "ceci" dans la déclaration de méthode de poste.
Essayez de l'appeler de cette façon:
this.MyMethod("test");
Modifier l'appel en Ce code compile: p>
Non, le compilateur ne sera pas échoué et il trouvera la méthode lorsque vous ajoutez "Ceci" mot-clé .. Je l'ai testé.
@Jalal oh heh j'ai quitté le commentaire original intact
Voici une solution alternative (préférée par moi): pourquoi? em> - parce que la solution fournie précédemment ne fonctionnera pas dans les cas où la méthode d'extension appelle les classes " Nouvelle méthode (la propriété est une méthode aussi). Dans de tels cas, vous avez STRUT> MAI STRT> l'intention d'appeler une méthode d'extension sur le type déclaré par la classe de base / interface, qui pourrait se comporter différemment de la classe / interface dérivée. P> aussi, ceci la solution fonctionnera à la fois pour les méthodes "nouvelles" et "remplacement", car "le remplacement" virtuel invoquera de toute façon une version dérivée, qui serait également destinée. p> Également, intéressant à noter comme une réponse au commentaire de Darin Dimitrov: méthodes d'extension ne nécessite pas strong> nécessiter d'instance pour les exécuter, car ils sont des méthodes statiques. Vous pouvez invoquer une méthode d'extension en tant que statique en lui transmettant des paramètres. Cependant, "base" n'est pas une valeur de paramètre valide pour le paramètre marqué par "Ceci" dans la déclaration de méthode d'extension, qui (si j'étais ms), permettrait de simplifier l'utilisation générale des méthodes d'extension. P> P>