c# - objetos - que es objeto en programacion
Crear una instancia de una clase desde su nombre textual (2)
Así es como se verá el método:
private static object MagicallyCreateInstance(string className)
{
var assembly = Assembly.GetExecutingAssembly();
var type = assembly.GetTypes()
.First(t => t.Name == className);
return Activator.CreateInstance(type);
}
El código anterior asume que:
- está buscando una clase que esté en el ensamblaje que se está ejecutando actualmente (esto se puede ajustar, simplemente cambie el
assembly
a lo que necesite) - hay exactamente una clase con el nombre que está buscando en ese ensamblaje
- la clase tiene un constructor por defecto
Actualizar:
Aquí se explica cómo obtener todas las clases que se derivan de una clase determinada (y se definen en el mismo conjunto):
private static IEnumerable<Type> GetDerivedTypesFor(Type baseType)
{
var assembly = Assembly.GetExecutingAssembly();
return assembly.GetTypes()
.Where(baseType.IsAssignableFrom)
.Where(t => baseType != t);
}
No me preguntes por qué, pero necesito hacer lo siguiente:
string ClassName = "SomeClassName";
object o = MagicallyCreateInstance("SomeClassName");
Quiero saber cuántas maneras hay para hacer esto y qué enfoque usar en qué escenario.
Ejemplos:
-
Activator.CreateInstance
-
Assembly.GetExecutingAssembly.CreateInstance("")
- Cualquier otra sugerencia sería apreciada
Esta pregunta no pretende ser una discusión abierta porque estoy seguro de que solo hay muchas maneras de lograr esto.
Activator.CreateInstance(Type.GetType("SomeNamespace.SomeClassName"));
o
Activator.CreateInstance(null, "SomeNamespace.SomeClassName").Unwrap();
También hay sobrecargas donde puede especificar argumentos de constructor.