una que programacion objetos objeto metodos ejemplos dinamicos crear como clases clase caracteristicas c# string class instantiation

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.