Instancier une classe à partir de son nom textuel
Ne me demandez pas pourquoi, mais j'ai besoin de faire ce qui suit:
string ClassName = "SomeClassName";
object o = MagicallyCreateInstance("SomeClassName");
Je veux savoir de combien de façons il y a à faire c'est et de l'approche à utiliser dans le scénario.
Exemples:
Activator.CreateInstance
Assembly.GetExecutingAssembly.CreateInstance("")
- Toute autre suggestion serait appréciée
Cette question n'est pas destiné à être ouvert et clos la discussion parce que je suis sûr qu'il ya seulement tellement de façons cela peut être réalisé.
- Un double possible de stackoverflow.com/questions/648160/...
- Hmm, quelles sont les chances que vous pouvez deviner son nom d'espace de noms correctement? Et l'assemblée elle vient?
- C'est l'assemblée le type est déjà chargé ou pas? Si cela arrive à être quelque chose autour de plugins, vous pouvez consulter la MEF
- Aussi, les étudiants de la classe n'a pas args ctor? (Plus précisément, peut-être que des suppositions)
- En fait, ces noms sont connus et les classes existent dans la même assemblée, dans laquelle j'ai besoin pour ce faire.
Vous devez vous connecter pour publier un commentaire.
Voici ce que la méthode peut ressembler à:
Le code ci-dessus suppose que:
assembly
à ce que vous avez besoin)Mise à jour:
Voici comment obtenir toutes les classes qui dérivent d'une classe donnée (et sont définis de la même assemblée):
assembly.GetTypes
permettrait que.Activator.CreateInstance
retourne unobject
et vous pouvez avoir besoin de le lancer en premier.ou
Il y a aussi des surcharges où vous pouvez spécifier des arguments du constructeur.