Instancier une classe à partir de son nom textuel
ne me demandez pas pourquoi mais je dois 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 censée être une question ouverte. discussion parce que je suis sûr qu'il ya seulement tellement de façons cela peut être réalisé.
31
demandé sur
peter-b
2012-03-24 23:41:01
2 réponses
voici à quoi peut ressembler la méthode:
private static object MagicallyCreateInstance(string className)
{
var assembly = Assembly.GetExecutingAssembly();
var type = assembly.GetTypes()
.First(t => t.Name == className);
return Activator.CreateInstance(type);
}
le code ci-dessus suppose que:
- vous recherchez une classe qui est dans l'assemblage en cours d'exécution (cela peut être ajusté - il suffit de changer
assembly
à tout ce dont vous avez besoin) - il y a exactement une classe avec le nom que vous cherchez dans cette assemblée
- la classe a un constructeur par défaut
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):
private static IEnumerable<Type> GetDerivedTypesFor(Type baseType)
{
var assembly = Assembly.GetExecutingAssembly();
return assembly.GetTypes()
.Where(baseType.IsAssignableFrom)
.Where(t => baseType != t);
}
44
répondu
GolfWolf
2012-03-25 17:01:10
Activator.CreateInstance(Type.GetType("SomeNamespace.SomeClassName"));
ou
Activator.CreateInstance(null, "SomeNamespace.SomeClassName").Unwrap();
il y a aussi des surcharges où vous pouvez spécifier des arguments de constructeur.
16
répondu
Balazs Tihanyi
2012-03-24 20:21:07