2011-10-20 20 views
5

Estoy tratando de usar Rtti para implementar un método genérico invocador. Se debe trabajar de esta manera:¿Cómo obtener la referencia de tipo de clase por su nombre en Delphi XE?

  • voy a dar el nombre de clase, nombre del método, y los argumentos
  • el invocador hará su trabajo invocando el método especificado de esta clase

Por lo tanto, Necesito la referencia de clase para obtener su información Rtti y buscar el método que deseo invocar.

¿Hay alguna manera de hacerlo sin implementar una lista de referencia de clase de las clases con las que quiero trabajar?

+0

¿Cómo planea obtener una instancia de la clase? –

+0

Puedo instanciar un objeto si obtengo la referencia de clase – Haruki

Respuesta

8

Para obtener la referencia de clase usando su nombre, debe usar la función TRttiContext.FindType pasando el Nombre de la clase y recuperar la instancia usando la propiedad AsInstance y luego puede llamar al constructor de la clase.

var 
    Instance : TRttiInstanceType; 
    ctx : TRttiContext; 
    mClass : TValue; 
begin 
    ctx := TRttiContext.Create; 
    Instance := ctx.FindType(ClassName).AsInstance; //ClassName is something like 'Classes.TStringList'; 
    mClass := Instance.GetMethod('Create').Invoke(Instance.MetaclassType,[]); 

    //do your stuff here 


end; 
+0

Funcionó aquí, muchas gracias por su respuesta! – Haruki

+0

¿Hay alguna manera de ver si tengo alguna instancia de esta clase ya instanciada y obtener este objeto para su uso? – Haruki

+2

Esto es para otra pregunta, pero usar el RTTI que no es posible. – RRUZ

Cuestiones relacionadas