Bonjour,
Je cherche, par reflexion, à savoir si une méthode est une méthode d'extension. Savez-vous si cela est possible ?
merci.
Bonjour,
Je cherche, par reflexion, à savoir si une méthode est une méthode d'extension. Savez-vous si cela est possible ?
merci.
qu'entends tu par méthode d'extension ?.
méthode de surcharge (override) ? ou methode de masquage (new) ?
ou j'ai rien compris ?
Salut,
je crois avoir compris que les methodes d'extension ne sont que des jeux d'ecritures, le code derriere restant identique à une methode statique. Donc, je ne vois pas trop comment tu pourrais trouver ca, a part en comparant la methode que tu supposes d'extensions et la liste des methodes du type par reflection.
@ Cinemania :
Les methodes d'extension sont une nouveautés de C# 3 (dont Linq se sert à foison), exemple :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30 public class MaClasse { public string S { get; set; } public void SetAndDisplay(string s) { Console.WriteLine(s); S = s; } public static void Main() { MaClasse cl = new MaClasse(); cl.SetAndDisplay("Salut"); //Remplacé par ClassStatic.MaMethodStatic(mC, "Salut") cl.MaMethodStatic("Salut"); } } public static class ClassStatic { //Ici le premier argument est marqué this de type MaClasse, donc cette methode etendra les instances de type MaClasse public static void MaMethodStatic(this MaClasse mC, string s) { Console.WriteLine(s); mC.S = s; } }
Attends la, tu veux dire qu'en c# 3.0 tu peut regrouper toutes les classes static de tes objets dans une seule et unique classe statique et tu entendras ces méthodes pour les associés à la bonne classe ?
Je ne sais ce qui est le plus propre, que chaque classe gère ses méthodes static ou qu'une classe gère toutes les méthodes static ?
Et comment cela marche d'un point de vue portée de la classe ?
Un avantage est de pouvoir étendre des classes dont tu n'as pas les sources.
Les règles du forum
Le trio magique : FAQ + Cours + fonction rechercher
Mes articles
Pas de questions par messages privés svp
Software is never finished, only abandoned.
C'est ce que je me disais aussi. Mais Visual Studio arrive avec l'intellisens à reconnaître les méthodes d'extensions. Or il me semble que l'intellisens fonctionne avec la réflexion... D'où mon questionnement.je crois avoir compris que les methodes d'extension ne sont que des jeux d'ecritures, le code derriere restant identique à une methode statique. Donc, je ne vois pas trop comment tu pourrais trouver ca![]()
Salut,Envoyé par ced600
si tu parles de la portée de la methode d'extension, elle viendra etendre tous les elements du type du premier argument de la methode static, si tu es dans le bon namespace. Par exemple, si tu es sur Orcas, ajoute le namespace System.Linq, tu verras les methodes d'extensions d'IEnumerable<T>.
si tu parles de la portée de la classe cible, aucun probleme la dessus, vu que tu as l'accès (dans l'extension) qu'aurait une methode static normale.
Bref c'est pas forcement la revolution de C#3 mais c'est quand meme bien pratique (les Max<T>(), Min<T>() ou encore ToDictionnary<T, U>(Func<T, U> keySelector) de IEnumerable<T> on ne n'en passe plus ). Pour le regroupement de classe statics dans une seul classe, oui c'est possible, apres savoir si c'est adapté, ce n'est pas parceque cela existe qu'il faut forcement l'utiliser. =p
Partager