76 votes

c # instancie la classe à partir de la chaîne

J'ai une classe abstraite et je veux l'initier à une classe qui l'étend.

J'ai le nom des classes enfant sous forme de chaîne.

Mis-à-part...

 String childClassString;
MyAbstractClass myObject;

if (childClassString = "myExtenedObjectA")
    myObject = new ExtenedObjectA();
if (childClassString = "myExtenedObjectB")
    myObject = new ExtenedObjectB();
 

Comment puis-je faire ceci? Fondamentalement, comment puis-je me débarrasser des déclarations if ici?

132voto

Seth Petry-Johnson Points 5709

Examinez Activator.CreateInstance ().

 myObject = (MyAbstractClass)Activator.CreateInstance("AssemblyName", "TypeName");
 

ou

 var type = Type.GetType("MyFullyQualifiedTypeName");
var myObject = (MyAbstractClass)Activator.CreateInstance(type);
 

22voto

IAbstract Points 9384

Je crois que cela devrait fonctionner:

 myObject = (MyAbstractClass)Activator.CreateInstance(null, childClassString);
 

Le null dans le premier paramètre est par défaut l'assembly en cours d'exécution. Pour plus de référence: MSDN

edit: oublié de transtyper en MyAbstractClass

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X