Tengo un problema interesante. Necesito envolver las clases estáticas dinámicamente. Es decir. devolver una instancia no estática a mis interlocutores. ej .:Cómo envolver una clase estática en un objeto instancia no estático (dinámicamente)
public object CreateInstance(string className) {
Type t = assembly.GetType(className);
if (IsStatic(t)) {
return CreateStaticWrapper(t);
} else {
return Activator.CreateInstance(t);
}
}
Así que lo que necesito es punteros en cuanto a la forma de aplicar CreateStaticWrapper
.
Nota: Desafortunadamente, no puedo usar objetos dinámicos.
¿Cuáles son mis opciones? No estoy tan interesado en aprender IL generation? Si la generación IL (Reflection.Emit, ¿o hay otras formas ahora?) Es el camino a seguir, ¿alguien tiene punteros allí?
Editar: Es importante tener en cuenta que puedo devolver un Dictionary of Delegates. Así que podría usar Delegate.CreateDelegate
para esto, pero parece que no puedo resolver cómo manejar métodos sobrecargados y métodos genéricos.
Edit2: Otra opción sería inyectar un constructor vacío en el tipo usando Emit, de nuevo cualquier puntero? ¿Esto es posible incluso en un tipo marcado como estático? ¿La palabra clave estática lo convierte en IL?
Edit3: Por un poco de contexto, estoy pasando esto a un entorno de JavaScript, vea: my project. Así que me gustaría poder (en JavaScript):
var fileHelper = .create('System.IO.File');
if (fileHelper.Exists(fileName)) { fileHelper.Delete(fileName); }
Thanks All.
¿Su objetivo es crear una copia del contenido de la clase estática? ¿Existe un equivalente no estático de la clase estática? (Una clase no estática con las mismas propiedades que la clase estática? – k3b
¿Cómo debería verse el contenedor? Miembros de instancia Proxy para los miembros estáticos correspondientes en la clase original? – Einar
He editado (3) por un poco de contexto. Básicamente estoy pasando esta clase estática a un entorno de JavaScript. Así que sí, el proxy necesita tener la misma firma. Me gustaría poder hacerlo (en javascript): var fs = .create ('System.IO.File'); fs.Exists ('filename'); – gatapia