डेल्फी 2010 और आरटीटीआई का उपयोग करके, मुझे पता है कि किसी ऑब्जेक्ट के वर्ग प्रकार को कैसे प्राप्त करें और किसी वस्तु के गुणों के मूल्य और प्रकार को कैसे प्राप्त/सेट करें, लेकिन आप कैसे निर्धारित करते हैं कि कौन सी कक्षा विरासत श्रृंखला एक संपत्ति से आया था? मैं मुख्य वर्ग की तुलना में बेस क्लास के गुणों का अलग-अलग उपयोग करना चाहता हूं।डेल्फी आरटीटीआई: संपत्ति की कक्षा
TClassBase = class(TObject)
published
property A: Integer;
end;
TClassDescendant = class(TClassBase)
published
property B: Integer;
end;
procedure CheckProperties(Obj: TObject);
var
ctx: TRttiContext;
objType: TRttiType;
Prop: TRttiProperty;
begin
ctx := TRttiContext.Create;
objType := ctx.GetType(Obj.ClassInfo);
for Prop in objType.GetProperties do begin
if Prop.GetClassType is TClassBase then
// do something special with base class properties
else
// standard functionality on all other properties
end;
end;
समस्या गुण के लिए कोई GetClassType वहाँ है:
इस कोड पर विचार करें। क्लासटाइप केवल उस वर्ग के नाम के बजाय TRttiInstancePropertyEx देता है जिस पर संपत्ति संबंधित है।
आपका प्रश्न थोड़ा उलझन में है। कृपया साफ़ करें। आप वास्तव में क्या ढूंढ रहे हैं? क्या आप यह निर्धारित करने की कोशिश कर रहे हैं कि 'Obj.PropertyName' एक ऑब्जेक्ट लौटाता है जो 'TClassDescendant' उदाहरण बनाम' TClassBase' उदाहरण है? या फिर आप यह निर्धारित करने की कोशिश कर रहे हैं कि 'Obj.PropertyName' को' TClassBase' के रूप में घोषित किया गया है, भले ही किस प्रकार का ऑब्जेक्ट आवृत्ति लागू होता है? आप जिस वस्तु (ओं) की जांच कर रहे हैं, द्वारा 'TClassBase' और' TClassDescendant' का उपयोग कैसे किया जा रहा है? –
मैं जानना चाहता हूं कि "आप कैसे निर्धारित करते हैं कि विरासत श्रृंखला में कौन सी कक्षा से एक संपत्ति आई है" या फिर TClassBase में संपत्ति या TClassDescendant में है। चूंकि मैं कक्षा के गुणों को पार कर रहा हूं, मैं बेस क्लास गुणों को अनदेखा करना चाहता हूं। मेरी विशेष स्थिति में, मैंने TInterfacedObject से एक वर्ग को जन्म दिया है और जब तक उनके पास [अनदेखा] विशेषता नहीं है, तब तक सभी गुणों पर एक फ़ंक्शन निष्पादित कर रहा हूं, लेकिन मैं आसानी से TInterfacedObject से RefCount को अनदेखा करना चाहता हूं। –
यह जांचने के बजाय कि वर्तमान संपत्ति किसी विशिष्ट वर्ग में मौजूद है या नहीं, यह जांचने के लिए और अधिक समझदारी होगी कि ऑब्जेक्ट की गणना की जाने वाली वस्तु इच्छित वर्ग है या नहीं। यह लागू करना और अधिक सटीक होना बहुत आसान होगा। –