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
[TECHDAYS2012] OUI J'Y SERAI![TECHDAYS2012] OUI J'Y SERAI! par JeremyJeanson
Bonsoir, Certes, je l'annonce avec un peu de retard, mais je serai effectivement au Techdays demain. Comme l'an dernier, je participerai au programme ATE (Ask The Expert). Si vous avez des questions Workflow, WCF, AppFabric ou plus généralement .net, n'hé...
Cliquez pour lire la suite de l'article par JeremyJeanson TFS INTEGRATION TOOLS - SUIVI DES SYNCHRONISATIONS AVEC REPORTING SERVICESTFS INTEGRATION TOOLS - SUIVI DES SYNCHRONISATIONS AVEC REPORTING SERVICES par vfabing
Afin de s'assurer du bon fonctionnement des différentes synchronisations effectuées par les TFS Integration Tools, 2 rapports sont présents dès l'installation. Il suffit alors d'effectuer les manipulations suivantes pour pouvoir les visualiser : Loca...
Cliquez pour lire la suite de l'article par vfabing CSS CONTENT STATE SELECTORS (PERSONNAL DRAFT)CSS CONTENT STATE SELECTORS (PERSONNAL DRAFT) par FREMYCOMPANY
Bonjour à tous, Je viens de publier une proposition comprenant 5 pseudo-classes pour le CSS Working Group ayant trait à l'état de chargement d'un élément (ex: IMG,VIDEO,AUDIO,OBJECT pour l'HTML.). Si le c½ur vous en dit, vous pouvez retrouver cette p...
Cliquez pour lire la suite de l'article par FREMYCOMPANY MBA : POURQUOI FAIRE ET COMMENT LE CHOISIR ?MBA : POURQUOI FAIRE ET COMMENT LE CHOISIR ? par ROMELARD Fabrice
Formation initiale Durant la formation, le découpage classique est le suivant (je donnerai les équivalences Suisse lorsque je les connaîtrais) : Ecole primaire jusqu'au Collège : Formation générale permettant d'obtenir les méthodes...
Cliquez pour lire la suite de l'article par ROMELARD Fabrice Y'A DES ERREURS QUI PEUVENT RENDRE LE DéVELOPPEUR VIOLENTY'A DES ERREURS QUI PEUVENT RENDRE LE DéVELOPPEUR VIOLENT par Aleks
Quand on a ce genre d'erreur sans log :
Et bas on a juste envie de choper le gas de Microsoft qu'a développé ça et lui foutre des baffes de Coboye ! ...
Cliquez pour lire la suite de l'article par Aleks
Logiciels
Academy System (17.2.1.0)ACADEMY SYSTEM (17.2.1.0)Logiciel de gestion des établissements.
- élèves/étudiants (inscription, dossier, absence...)
-... Cliquez pour télécharger Academy System Easy-Planning (1.0.0.1)EASY-PLANNING (1.0.0.1)Basé sur les mêmes principes que MyPlanning, Easy-Planning permet de créer des plannings sous la ... Cliquez pour télécharger Easy-Planning COLLECTOR PLUS (3.00B)COLLECTOR PLUS (3.00B)COLLECTOR PLUS version 3.00B est un logiciel utilisant une base de données alimentée par :
- L... Cliquez pour télécharger COLLECTOR PLUS PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO (V7.4)PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO (V7.4)PONAMEDIA TV DEVIENS HELLLOOO FLASH
LA TV SUR VOTRE ORDINATEUR.
Toute une plateforme Multi... Cliquez pour télécharger PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO LettresFaciles 2011 (8.0.0.1)LETTRESFACILES 2011 (8.0.0.1)LettresFaciles est un logiciel facilitant la création et la rédaction de lettres types.
Son inte... Cliquez pour télécharger LettresFaciles 2011
|