Accueil > > > DECLARATION DYNAMIQUE D'UNE CLASSE ET D'UNE MÉTHODE DE CELLE-CI
DECLARATION DYNAMIQUE D'UNE CLASSE ET D'UNE MÉTHODE DE CELLE-CI
Information sur la source
Description
Pour construire des applications qui s'adaptent aux évolutions des assemblages, rien de tel que le dynamique. Cela permet par exemple d'appeller une méthode commune à plusieurs classes en donnant par saisie d'une chaine le nom de la classe. Différentes versions sont décrites ci-dessous. Ne pas oublier d'ajouter le namespace System.Reflection : using System.Reflection; Les objets utilisés sont à découvrir plus précisément par vous-même, ils permettent de parcourir notamment tout le contenu d'un assemblage...
Source
- // Version longue pour un assemblage qui est externe mais local (.dll)
- // aucune référence et using n'est nécessaire. Ne marche pas pour
- // un assemblage dans le gac
- Assembly v_Assembly=Assembly.Load("Namespace1");
- Module v_Module=v_Assembly.GetModule("Namespace1.dll");
- Type v_Type=v_Module.GetType("Namespace1." + ClasseConcernee,true,false);
- MethodInfo v_metInfo=v_Type.GetMethod("Method1");
- Object[] v_tabParameters=new Object[] {Liste des paramètres};
- v_metInfo.Invoke(v_Type,v_tabParameters);
-
- // Version courte pour un assemblage qui est externe mais local (.dll)
- // aucune référence et using n'est nécessaire. Ne marche pas pour
- // un assemblage dans le gac
- Type v_Type=Assembly.Load("Namespace1").GetModule("Namespace1.dll").GetType("Namespace1." + ClasseConcernee,true,false);
- v_Type.GetMethod("Method1").Invoke(v_Type,new Object[] {Liste des paramètres});
-
- // Version pour un assemblage externe mais référéncé et
- // avec un using dans la classe en question.
- // L'avantage de celui-ci est qu'il prend en compte un assemblage local
- // ou dans le gac.
- Assembly[] v_CurrentAssemblies=AppDomain.CurrentDomain.GetAssemblies();
- // Recherche de l'assemblage que l'ont veut utiliser
- // parmi les assemblages utilisés actuellement
- foreach (Assembly v_Assembly in v_CurrentAssemblies)
- {
- if ( v_Assembly.FullName.StartsWith("Namespace1") )
- {
- // L'assemblage a été trouvé, execution de notre méthode
- Type v_Type=v_Assembly.GetType("Namespace1." + ClasseConcernee,true,false);
- v_Type.GetMethod("Import").Invoke(v_Type,new Object[] {Liste des paramètres});
- break;
- }
- }
-
- // Pour l'assemblage courant
- // et même nom de namespace
- Type v_Type=Type.GetType(ClasseConcernee,true,false);
- v_Type.GetMethod("Method1").Invoke(v_Type,new Object[] {Liste des paramètres});
// Version longue pour un assemblage qui est externe mais local (.dll)
// aucune référence et using n'est nécessaire. Ne marche pas pour
// un assemblage dans le gac
Assembly v_Assembly=Assembly.Load("Namespace1");
Module v_Module=v_Assembly.GetModule("Namespace1.dll");
Type v_Type=v_Module.GetType("Namespace1." + ClasseConcernee,true,false);
MethodInfo v_metInfo=v_Type.GetMethod("Method1");
Object[] v_tabParameters=new Object[] {Liste des paramètres};
v_metInfo.Invoke(v_Type,v_tabParameters);
// Version courte pour un assemblage qui est externe mais local (.dll)
// aucune référence et using n'est nécessaire. Ne marche pas pour
// un assemblage dans le gac
Type v_Type=Assembly.Load("Namespace1").GetModule("Namespace1.dll").GetType("Namespace1." + ClasseConcernee,true,false);
v_Type.GetMethod("Method1").Invoke(v_Type,new Object[] {Liste des paramètres});
// Version pour un assemblage externe mais référéncé et
// avec un using dans la classe en question.
// L'avantage de celui-ci est qu'il prend en compte un assemblage local
// ou dans le gac.
Assembly[] v_CurrentAssemblies=AppDomain.CurrentDomain.GetAssemblies();
// Recherche de l'assemblage que l'ont veut utiliser
// parmi les assemblages utilisés actuellement
foreach (Assembly v_Assembly in v_CurrentAssemblies)
{
if ( v_Assembly.FullName.StartsWith("Namespace1") )
{
// L'assemblage a été trouvé, execution de notre méthode
Type v_Type=v_Assembly.GetType("Namespace1." + ClasseConcernee,true,false);
v_Type.GetMethod("Import").Invoke(v_Type,new Object[] {Liste des paramètres});
break;
}
}
// Pour l'assemblage courant
// et même nom de namespace
Type v_Type=Type.GetType(ClasseConcernee,true,false);
v_Type.GetMethod("Method1").Invoke(v_Type,new Object[] {Liste des paramètres});
Conclusion
Il existe énormément de manière pour lancer dynamiquement une classe, seul une petite partie est montrée ici...
Sources du même auteur
Sources de la même categorie
Commentaires et avis
Discussions en rapport avec ce code source dans le forum
Declaration dynamique d'une classe [ par Barz ]
Comment par code peut-on executer une méthode d'une classe en dynamique, c'est à dire en ayant que une chaine correspondant au nom de la classe et une
Initialisation d'un tableau dynamique à deux dimensions [ par cybers7119 ]
Salut à tous,J'ai un tableau à deux dimensions, qui comprendra quatre colonnes mais dont le nombre de lignes est inconnu.Je connais la méthode suivant
Appel dynamique [ par chental ]
salut à tous,Je fais un appel dynamique sur une méthode de ma Form.Par exemple : l'utilisateur tape : Affichage@toto Affichage est une méthode et toto
Communiquer entre une winform et une méthode javascript [ par idaho121 ]
Bonjour, J'ai une application C# qui travaille avec une instance d'Internet Explorer. Internet Explorer contient des ActiveX qui lèvent des événements
Exploiter 2 table de la même Base dans le même prog [ par ggrug26 ]
Bonjour, je rencontre un gros souci, je veux exploiter 2 table dans mon prog, je fais toutes mes déclaration en double, j'arrive a exploiter la 1ere t
Linq Méthode Field<> avec type de retour inconnu [ par lemmingperceval ]
BonjourJ'essaie de faire des filtres de recherche sur un dataGridView.Dès lors, j'ai une comboBox qui contient tous les champs de la table contenu dan
tableau passé en paramètre d'un webservice.. [ par AmK ]
Bonjour, J'ai remarqué lors de mes développements que lorsque je passe un tableau en paramètre à une webméthode , la valeur de ses éléments ne sont pa
fusion de méthode ou méthode équivalente [ par ggrug26 ]
bonjour,j'ai une petite question, est il possible de fusionner 2 méthode ensemble? Je vais me faire comprendre avec mon exemple:je cherche a regrouper
Retour d'information dynamique [ par kikiokiller ]
Bonjour,Voilà j'ai un form1 (parent) qui contient un hscrollbar et un vscrollbar accompagné d'un textbox chacun.J'ouvre un form2 (fils) et je voudrai
appel de form dynamique.... [ par parlaciel ]
bonjour à tous!alors je vous expose mon problème qui va certainement vous paraitre balot....Je crée une form à chaque clic sur un bouton.Mais les form
|
Derniers Blogs
[DIVERS] SUIVRE VOS SéRIES PRéFéRéS SUR LA TOILE[DIVERS] SUIVRE VOS SéRIES PRéFéRéS SUR LA TOILE par orion
Comme de nombreux geek, je suis un grand amateur de série TV et je rate régulièrement des épisodes de mes séries préférés. Une solution s'offre à vous avec ce merveilleux site : Tv Gorge - www.tvgorge.com Moteur de recherche à l'appui, vous pouvez ...
Cliquez pour lire la suite de l'article par orion TECHDAYS PARIS 2010 : LA BI DANS SHAREPOINT 2010TECHDAYS PARIS 2010 : LA BI DANS SHAREPOINT 2010 par ROMELARD Fabrice
Animé par: Vincent Bellet et Baptiste Giraudier La BI dans SharePoint 2010, Les nouveaux services d'application dans SP2010 et SQL Server Reporting services 2008 R2. La BI dans SharePoint est généralisée pour tous afin de permettre à tous les coll...
Cliquez pour lire la suite de l'article par ROMELARD Fabrice TECHDAYS PARIS 2010 : PLAN DE MIGRATION VERS SHAREPOINT 2010TECHDAYS PARIS 2010 : PLAN DE MIGRATION VERS SHAREPOINT 2010 par ROMELARD Fabrice
Animé par: Arnault Nouvel et Antoine Dongois Le processus à prendre : Apprendre (découvrir la plateforme) Préparer (documenter l'historique et choisir la méthode de MAJ) Test (Test de MAJ) Implémenter (Effectuer la MAJ) Valid...
Cliquez pour lire la suite de l'article par ROMELARD Fabrice TECHDAYS PARIS 2010 : LA PLEINIèRE DU SECOND JOURTECHDAYS PARIS 2010 : LA PLEINIèRE DU SECOND JOUR par ROMELARD Fabrice
Après un retour sur l'histoire des TechDays de Paris et le fait que ce soit le plus gros event MS au monde (du fait de sa gratuité), le président de MS France (Eric Boustoullier) a fait une présentation de la vision Microsoft pour les années à venir...
Cliquez pour lire la suite de l'article par ROMELARD Fabrice
Logiciels
DB-MAIN (9.1.0)DB-MAIN (9.1.0)DB-MAIN is a data-modeling and data-architecture tool. It is designed to help developers and anal... Cliquez pour télécharger DB-MAIN Xilisoft DPG Convertisseur (5.1.37.0120)XILISOFT DPG CONVERTISSEUR (5.1.37.0120)Xilisoft DPG Convertisseur offre aux fans de Nintendo DS une bonne solution leur permettant de dé... Cliquez pour télécharger Xilisoft DPG Convertisseur GraphicsGale (2.01.01)GRAPHICSGALE (2.01.01)GraphicsGale est un logiciel de PixelArt avec de nombreuse fonctionnalités permettant de réalisé ... Cliquez pour télécharger GraphicsGale Architecte 3D (Platinum 2010)ARCHITECTE 3D (PLATINUM 2010)Architecte 3D Platinium vous permet de concevoir facilement les plans votre future maison, de l'é... Cliquez pour télécharger Architecte 3D TeamViewer 5 (TeamViewer 5)TEAMVIEWER 5 (TEAMVIEWER 5)Dépanner un ami,expliquer une manipulation devient un jeu d'enfant.
Prise en main d'un autre ord... Cliquez pour télécharger TeamViewer 5
|