delphi - How to check inheritance in generics with inherited parameter_ -


मेरे पास 2 श्रेणी पदानुक्रम हैं:

1।

  TObject --टाम ऑब्जेक्ट --टीएमएफ़िल्ड --टीएमएफ़ाफ़  

2।

  टूबाइजलिस्ट & lt; टी: टीएएमओबैज & gt; --टीएमऑब्जेक्ट लिस्ट & टीटी: टीएएमओबैज & gt;  

मेरे पास TTreeView के नोड्स से जुड़े कुछ ऑब्जेक्ट हैं।

फिर मेरे पास एक जांच करने का कार्य है: pre> अगर TObject (node.Data) TAmObject <है / code>

या

  अगर TObject (node.Data) TAmObjectList & lt; TAmObject & gt;  

पहले जांच अच्छी है और मुझे कोई समस्या नहीं आती है दूसरे के साथ मुझे कुछ समस्याएं हैं।

Pls मुझे चेक बनाने का तरीका बताते हैं। ।

तब संकलित उदाहरण के लिए मैं TamFarmList नोड से जुड़ा हुआ है मुझे कहते हैं:

  TObject (node.Data) TAmObjectList & lt; TAmObject & gt; = FALSE  

लेकिन

  टूबाइजेक्ट (नोड। डेटा) टीएएम ऑब्जेक्ट लिस्ट है & lt; TAmFarm & gt; = TRUE  

लेकिन मुझे सभी सूचियों के लिए सामान्य जांच की आवश्यकता है।

Pls मुझे रास्ता दिखाती है क्या यह संभव है?

यह सहानुभूति की समस्या है जो डेल्फी का समर्थन नहीं करता है। चूंकि सामान्य प्रकार उनके प्रकार पैरामीटर का प्रतिबिंब प्रदान नहीं करते हैं, इसलिए आपको कुछ अन्य तरीके ढूंढना पड़ता है।

मैंने जो अतीत में इस्तेमाल किया है, वह एक प्रकार का नाम लिखने के लिए कुछ स्ट्रिंग पार्सिंग करना है और फिर RTTI का उपयोग करना है उदाहरण के लिए सी # प्रतिबिंब क्या सक्षम है? यह सही नहीं है परन्तु उसने अतीत में काम को अच्छी तरह से किया है।

यहां स्प्रिंग 4 डी का उपयोग करने के लिए कुछ उदाहरण कोड दिया गया है।

  स्प्रिंग का उपयोग करता है। हेलपर, वसंत। ; ... var t: TRttiType; शुरू: ttyype.GetType (टूबैजेट (नोड। डेटा)। क्लासटाइप); अगर (t.GetGenericTypeDefinition = 'TAmObjectList & lt; & gt;') और (t.GetGenericArguments [0] .AsInstance.MetaclassType.InheritsFrom (TAmObject)) तो  

यह काम करता है अगर आपके उदाहरण सीधे है एक TAmObjectList & lt; T & gt; जहां टी TAmObject है यदि आप इसे वंश वंश वर्ग वर्गों के लिए काम करना चाहते हैं, तो आपको अपने कोड को प्राप्त करने के लिए GetGenericTypeDefinition पर जांच करें।


Comments

Popular posts from this blog

java - org.apache.http.ProtocolException: Target host is not specified -

java - Gradle dependencies: compile project by relative path -

ruby on rails - Object doesn't support #inspect when used with .include -