[C#] constructeur dynamique suivant le type passé en paramètre

constructeur dynamique suivant le type passé en paramètre [C#] - C#/.NET managed - Programmation

Marsh Posté le 18-10-2006 à 17:26:59    

Hello,
 
J'aimerai savoir si c'est possible, de créer une méthode capable de construire un objet du type que l'on transmet en paramètre ?
Exemple je transmet à cette methode le type monObjet et lui arrive a appeler le new de monobjet, si je lui transmet le type unautreobjet il est capable d'appeler le new correspondant a la classe unautreobjet.
 
c'est comprehensible :p ?


---------------
"PAR LE POUVOIR DU CRÂNE ANCESTRAL, JE DETIENS LA FORCE TOUTE PUISSANTE".
Reply

Marsh Posté le 18-10-2006 à 17:26:59   

Reply

Marsh Posté le 20-10-2006 à 13:17:34    

ah part faire un constructeur pour tous les cas, je voix pas bien comment on peut faire

Reply

Marsh Posté le 20-10-2006 à 17:53:39    

par Reflection


---------------
ceci est un bloc de texte
Reply

Marsh Posté le 20-10-2006 à 18:46:27    

En faut tu souhaite faire une sorte de factory un peu super méga générique?
Si oui, suis la réponse donnée plus haut : la reflection

Reply

Marsh Posté le 20-10-2006 à 18:47:46    

ca doit être du coté de System.Activator.CreateInstance

Reply

Marsh Posté le 21-10-2006 à 02:08:50    

oui il s'agit bien de reflecion, le problème etant que je ne vois pas comment appeler le constructeur d'un type passé en paramètre :/.
 
C'est la ou ca coince.
 
Oui c'est une sorte de factory hyper générique :D.


---------------
"PAR LE POUVOIR DU CRÂNE ANCESTRAL, JE DETIENS LA FORCE TOUTE PUISSANTE".
Reply

Marsh Posté le 21-10-2006 à 04:05:00    

ca existe déjà
 
ca sapelle la réflection
 
avec Activator.CreateInstance(tonType)
 
tonType peut etre écrit en string ou a laide de typeof()
 
merci de lire un peu sur le sujet ...

Reply

Marsh Posté le 21-10-2006 à 12:59:40    

tu as regardé sur MSDN ce que je t'ai dit? la réponse est dedans.

Message cité 1 fois
Message édité par Lamarmotte le 21-10-2006 à 13:00:02
Reply

Marsh Posté le 21-10-2006 à 13:42:17    

la meilleure solution ce n'est pas de faire de l'introspection, mais c'est d'utiliser des classes génériques.  
 
exemple de fonction générique
 
public void maFonction<T>(): T:new()
{
        T = new T();
}
 
appel:
 
maFonction<monObject>();
 
EDIT: uniquement avec .NET 2.0

Message cité 1 fois
Message édité par moi23372 le 21-10-2006 à 13:43:22
Reply

Marsh Posté le 21-10-2006 à 14:18:14    

Lamarmotte a écrit :

tu as regardé sur MSDN ce que je t'ai dit? la réponse est dedans.


sorry, a l'heure ou je suis venu sur le forum je n'ai pas été voir :D.
 
Mais ça à l'air sympa :D, je peux pas tester car je suis pas au boulot donc pas de visual studio, mais ça à l'air d'être ça.
Merci ;).
Je n'ai pas trouvé grand chose sur le net à ce sujet et des collègues me disaient qu'en .net c'était l galère à faire voir impossible ...


---------------
"PAR LE POUVOIR DU CRÂNE ANCESTRAL, JE DETIENS LA FORCE TOUTE PUISSANTE".
Reply

Marsh Posté le 21-10-2006 à 14:18:14   

Reply

Marsh Posté le 21-10-2006 à 14:20:21    

moi23372 a écrit :

la meilleure solution ce n'est pas de faire de l'introspection, mais c'est d'utiliser des classes génériques.  
 
exemple de fonction générique
 
public void maFonction<T>(): T:new()
{
        T = new T();
}
 
appel:
 
maFonction<monObject>();
 
EDIT: uniquement avec .NET 2.0


ok pourquoi pas, mais la tu vois je ne sais pas comment appeler une fonction dont je créais le nom manuellement :p, et je suis en framework 1.1.
Autre problème il faut réécrire la méthode pour chaque objet, si j'ai 6 objets il me faut créer 6 méthodes, c'est ce que je voudrai éviter :). Mais merci quand même, car j'vaais oublié ce genre de truc, qui me semble être faisable en java. Par contre je crois que cela est aussi de l'introspection non ?


---------------
"PAR LE POUVOIR DU CRÂNE ANCESTRAL, JE DETIENS LA FORCE TOUTE PUISSANTE".
Reply

Marsh Posté le 21-10-2006 à 16:23:38    

héhé personne ne m'écoute ici !!

Reply

Marsh Posté le 22-10-2006 à 02:14:37    

beinsi tu l'as dis juste apres lamarmotte :D.
 
Je testerai ca en semaine, mais ca serait assez tordant si c est aussi simple qu'annoncé :D.


---------------
"PAR LE POUVOIR DU CRÂNE ANCESTRAL, JE DETIENS LA FORCE TOUTE PUISSANTE".
Reply

Marsh Posté le 22-10-2006 à 04:51:02    

ski faut pas entendre...


---------------
ceci est un bloc de texte
Reply

Marsh Posté le 22-10-2006 à 13:38:47    

Clarkent a écrit :

ok pourquoi pas, mais la tu vois je ne sais pas comment appeler une fonction dont je créais le nom manuellement :p, et je suis en framework 1.1.
Autre problème il faut réécrire la méthode pour chaque objet, si j'ai 6 objets il me faut créer 6 méthodes, c'est ce que je voudrai éviter :). Mais merci quand même, car j'vaais oublié ce genre de truc, qui me semble être faisable en java. Par contre je crois que cela est aussi de l'introspection non ?


 
Non il ne faut pas recréer autant de méthode qu'il n'y a d'objet.  
 
Le "T" dans la méthode peut représenté n'importe quel objet. ça ne s'appele pas de l'introspection, mais une classe GENERIQUE qui dit bien ce qu'elle fait.  
Naturellement, si tu es un .NET 1.1, oublie ce truc la qui n'est présent que depuis le .NET 2.0 (ça vient initialement du C++ et pas convaincu que ça existe en JAVA).
 
Donc maintenant, te reste plus que l'introspection.  

Reply

Marsh Posté le 22-10-2006 à 13:54:33    

Je viens de regarder un petit exemple :).
En effet pas besoin de réécrire x fois la méthode, ça à l'air pas mal, dommage que ma boite reste en 1.1 :/.
 
en effet je ne crois aps qu'il y ait d'équivalent en java, enfin je ne sais pas, je confondais avec un autre principe.


---------------
"PAR LE POUVOIR DU CRÂNE ANCESTRAL, JE DETIENS LA FORCE TOUTE PUISSANTE".
Reply

Marsh Posté le 22-10-2006 à 16:38:49    

pour travailler avec un framework différent installe sur ton PC une machine virtuelle (ya des tools gratuits), c'est ce que l'on fait dans ma 'boite' pour simuler l'environement client ou simplement tester la compatibilité..
 
as tu lu un peu sur la réflection ? c'est vraiment puissant :)


---------------
ceci est un bloc de texte
Reply

Marsh Posté le 22-10-2006 à 17:34:23    

je ne travaillerai aps sur un framework different car ma boite c'est du framework 1.1, on ne passera pas en version 2 pour un moment.
 
je connaissais la réflexion, j'en avais jamais fait, on m'en avait parlé en java, en .net j'en ai jamais eu vraiment l'utilité :), mais voila que j'en ai besoin :D.


---------------
"PAR LE POUVOIR DU CRÂNE ANCESTRAL, JE DETIENS LA FORCE TOUTE PUISSANTE".
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed