Réflexion

aittigga Messages postés 3 Date d'inscription samedi 17 octobre 2009 Statut Membre Dernière intervention 10 juillet 2013 - 13 avril 2011 à 15:40
foliv57 Messages postés 420 Date d'inscription vendredi 17 novembre 2006 Statut Membre Dernière intervention 15 juillet 2014 - 14 avril 2011 à 09:03
Bonjour,
est ce que on peu récupérer une instance d'une Class par réflexion ?
Merci

1 réponse

foliv57 Messages postés 420 Date d'inscription vendredi 17 novembre 2006 Statut Membre Dernière intervention 15 juillet 2014 9
14 avril 2011 à 09:03
Oui, on peut tout faire par reflexion. On peut même créer une dll ou un exe.

Pour créer une instance il existe plusieurs méthode.
Exemple avec un objet de type System.Drawing.Size :

'Méthode 1
'Récupération du type
Dim t As Type = GetType(System.Drawing.Size)
'Création de l'instance
Dim obj As Object = Activator.CreateInstance(t)

'Méthode 2
'Chargement de l'assembly contenant le type
Dim a As Assembly = Assembly.Load("System.Drawing, version=2.0.0.0, culture=neutral, PublicKeyToken=b03f5f7f11d50a3a")
'Récupération du type
t = a.GetType("System.Drawing.Size")
'Paramètres à passer au constructeur (pour fair : New Size(10, 10))
Dim args() As Object = New Object() {10, 10}
'Appelle le constructeur du type Size avec les paramètres args
Dim obj2 As Object = t.InvokeMember("", BindingFlags.CreateInstance Or BindingFlags.DeclaredOnly Or BindingFlags.Instance Or BindingFlags.Public, Nothing, Nothing, args)

'Méthode 3
'Création d'une table de type avec deux Integer pour rechercher le
'constructeur de Size ayant deux paramètres de type Integer
Dim argTypes() As Type = New Type() {GetType(Integer), GetType(Integer)}
'Récupération du constructeur (New Size(Integer, Integer))
Dim ctor As ConstructorInfo = t.GetConstructor(argTypes)
'Création de l'instance avec les valeurs 10, 10 en paramètres
Dim obj3 As Object = ctor.Invoke(New Object() {10, 10})


A vous de choisir ...
0
Rejoignez-nous