qué - que es una instancia en c#
Crear instancia de objeto de una clase que tenga su nombre en variable de cadena (4)
No sé si lo que estoy preguntando está disponible o no, pero solo quiero saber si existe y cómo funciona. Ésta es mi pregunta:
Tengo 2-3 clases de modelos personalizados. Por ejemplo, Cliente, Empleado y Producto. Ahora tengo nombre de clase en una cadena. y basado en el nombre de la clase que viene en una cadena, tengo que crear su objeto y volver a una VISTA. ¿Cómo podría lograr esto?
Conozco una opción de declaración IF ELSE
pero quiero probar una forma mejor, " Dinámica " ...
La clase de activador hace este trabajo en .net y esta técnica es muy útil para el tipo de escenarios de inyección de dependencia.
string NameSpace = "ProjectName.YourNameSpace";
string ProbeClass = "CLassName";
ObjectHandle ProberHandle = Activator.CreateInstance(NameSpace, ProbeClass) as ObjectHandle;
ClassName Prober = ProberHandle.Unwrap() as ClassName;
Asegúrese de que desenvuelve antes de escribir el tipo de conversión, de lo contrario, se producirá un error de conversión.
La forma más fácil es usar Activator. Pasa el nombre de la clase a GetType y crea una nueva instancia.
ClassInstance s1 = (ClassInstance)Activator.CreateInstance(Type.GetType("App.ClassInstance"));
public class ClassInstance
{
public string StringData { get; set; }
}
Saludos, Nik
Tener el nombre de la clase en una cadena no es suficiente para poder crear su instancia. De hecho, necesitará un espacio de nombres completo que incluya el nombre de la clase para crear un objeto.
Suponiendo que tiene lo siguiente:
string className = "MyClass";
string namespaceName = "MyNamespace.MyInternalNamespace";
A continuación, puede crear una instancia de esa clase, el objeto de la clase MyNamespace.MyInternalNamespace.MyClass
utilizando cualquiera de las siguientes técnicas:
var myObj = Activator.CreateInstance(namespaceName, className);
o esto:
var myObj = Activator.CreateInstance(Type.GetType(namespaceName + "." + className));
Espero que esto ayude, por favor hágamelo saber si no.
string frmName = "frmCustomer";
//WorldCarUI. is the namespace of the form
Type CAType = Type.GetType("WorldCarUI." + frmName );
var myObj = Activator.CreateInstance(CAType);
Form nextForm2 = (Form)myObj;
nextForm2.Show();
esto funciona ...
Saludos avi