2009-08-09 10 views
5

¿es posible inicializar una clase por una variable de cadena? Tengo un código en PHP.inicializa una clase por variable de cadena en C#?

<?php 
    $classname = "test"; 

    $oTest = new $classname(); 

    class test{ 
    } 
?> 

¿cómo hago esto en C#?

+0

Creo que JaredPar responde su pregunta, pero ¿para qué necesita esto? ¿Qué estás tratando de resolver? – Zyphrax

Respuesta

19
System.Activator.CreateInstance(Type.GetType(className)) 

El problema, sin embargo, es que C# 3.0 es un lenguaje estáticamente tipado. No puede simplemente llamar a métodos aleatorios en el objeto devuelto. Puede hacer que las clases en las que pueda crear instancias implementen una interfaz común y emitir el resultado de la expresión anterior a la interfaz o usar manualmente la reflexión para invocar métodos en el objeto devuelto.

+1

Ver la respuesta me ayudó a entender la pregunta. +1 –

+0

¿Qué quiere decir con "C#, a partir de la versión 3.0 es un lenguaje estáticamente tipado"? Eso sugiere que hace poco se convirtió en un lenguaje estáticamente tipado. Siempre ha sido así. En C# 4.0 está la nueva palabra clave dinámica, lo que significa que C# obtendrá algunos aspectos de los lenguajes dinámicos si así lo desea. –

+0

Colin: Pude haberlo redactado de forma ambigua. Fijo. –

5

Puede usar el método Activator.CreateInstance para obtener un resultado similar. Pero usted tendrá que proporcionar el nombre de ensamblado, además del nombre completo del tipo

var instance = Activator.CreateInstance("SomeAssemblyName","Some.Full.Type.Test"); 
Cuestiones relacionadas