2016-11-02 8 views
6

का उपयोग कर परिवर्तनीय नाम प्राप्त करें मैं इस तरह आरटीटीआई का उपयोग कर चर नाम प्राप्त करने की कोशिश कर रहा हूं।आरटीटीआई

यहां मेरा परीक्षण है।

type 
    TStringHelper = record helper for string 
    function Name: string; 
    end; 

    TMyRecord = record 
    Field1:string; 
    end; 

implementation 

{ TStringHelper } 
function TStringHelper.Name: string; 
var 
context : TRttiContext; 
begin 
context := TRttiContext.Create; 
result := context.GetType(@Self).Name; // return empty 
context.Free; 
end; 

procedure TForm2.FormCreate(Sender: TObject); 
var 
r : TMyRecord; 
begin 
    ShowMessage(r.Field1.Name); 
end; 

TRttiType वापसी का नाम खाली है।

क्या कोई रास्ता वैरिएबल नाम प्राप्त है?

उत्तर

6

आरटीटीआई प्रकारों के बारे में जानकारी देता है न कि चर के बारे में। आम तौर पर इसका नाम खोजने के लिए आरटीटीआई का उपयोग करके कोई चर का पता नहीं दिया जाता है।

आरटीटीआई न केवल मदद करता है, बल्कि स्ट्रिंग ऑब्जेक्ट की विधि के रूप में आप जो प्रयास कर रहे हैं, वास्तव में संभव नहीं है। एक परिदृश्य की कल्पना करें जहां आपके पास एक ही ऑब्जेक्ट का जिक्र करने वाले दो चर हैं।

S := 'foo'; 
T := S; 

यहां एकल स्ट्रिंग ऑब्जेक्ट का नाम क्या है। क्या यह एस है या यह टी है?

+0

व्याख्या के लिए बहुत बहुत धन्यवाद। अगर आरटीवीआई (रन टाइम वैरिएबल सूचना) था तो यह अच्छा होगा। :) –

+2

कुछ भी "रनटाइम" की आवश्यकता नहीं है। कंपाइलर को केवल एक आंतरिक की आवश्यकता होगी जो संकलन समय पर एक स्ट्रिंग में एक प्रतीक को बदल देता है। सी # 6. में फ़ंक्शन नाम की तरह - इसके लिए वोट दें: https://quality.embarcadero.com/browse/RSP-13290 –

+0

मैंने वोट का उपयोग किया। धन्यवाद @StefanGlienke –

संबंधित मुद्दे