2011-10-20 18 views
5

Aslında, Rtti'yi genel bir yöntem olan bir girişimci için kullanmaya çalışıyorum. Şöyle çalışması gerekir:Sınıf tipi referansı Delphi XE'de adıyla nasıl edinilir?

  • Ben çağıran

Bu yüzden bu sınıfın belirtilen yöntemini çağırarak işini yapacak

  • sınıf adı, yöntem adı ve argümanları vereceğiz Rtti bilgilerini almak ve çağırmak istediğim yöntemi aramak için sınıf referansına ihtiyacım var.

    Çalışmak istediğim sınıfların bir sınıf referans listesini uygulamadan bunu yapmanın bir yolu var mı?

  • +0

    Sınıfın örneğini tutmayı nasıl planlıyorsunuz? –

    +0

    Bir nesneyi, sınıf referansını alıp alamayacağımı anlayabilirim – Haruki

    cevap

    8

    Adını kullanarak sınıf başvurusunu almak için, sınıfın Adını ileten TRttiContext.FindType işlevini kullanmanız ve AsInstance özelliğini kullanarak örneği almanız ve sonra sınıfın yapıcısını çağırabilirsiniz.

    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

    Burada çalıştı, cevabınız için çok teşekkürler! – Haruki

    +0

    Bu sınıfın herhangi bir örneğinin halihazırda başlatılmış olup olmadığını görmek ve bu nesneyi kullanmak için herhangi bir yolu var mı? – Haruki

    +2

    Bu başka bir soru için, ancak mümkün olmayan RTTI'yi kullanıyor. – RRUZ

    İlgili konular