2012-06-05 14 views
6

मैं एक संपत्ति जो जेनरिक का उपयोग करता है लिखने के लिए कोशिश कर रहा हूँ:संपत्ति डेल्फी में जेनेरिक्स का उपयोग कर

type TMyClass = class 
    protected 
    function GetCountBy<T: Class>: Integer; 
    public 
    property CountBy<T: Class>: Integer read GetCountBy<T>; 
    end; 

लेकिन संकलन संदेश के साथ संपत्ति घोषणा पर विफल रहता है 'संपत्ति CountBy आधार वर्ग में मौजूद नहीं है', और संपत्ति नाम के उद्घाटन < पर लाल squiggle।

क्या यह हासिल करने का कोई तरीका है?

संपादित करें:

property ItemsBy<T: Class>[Index: Integer]: T read GetItemsBy<T> write SetItemsBy<T>; 

समारोह एक सूची की सामग्री फिल्टर निर्दिष्ट वर्ग के Index'th आइटम लौटने के लिए: यहाँ मेरी अन्य उपयोग के मामले, जो और अधिक जटिल है, लेकिन वास्तविक जीवन है।

+0

आप बस TDictionary यहाँ की जरूरत है। जेनेरिक इस समस्या के लिए उपयुक्त नहीं हैं। –

+0

-1। यह एक बेहतर सवाल होगा यदि यह ऐसी समस्या से प्रेरित था जो वास्तव में जेनेरिक से लाभान्वित होगा। प्रश्न में "जेनेरिक प्रॉपर्टी" उदाहरण जेनिक्स की बिल्कुल आवश्यकता नहीं है। यह संभावित जुर्माना प्रश्न सामान्य गुण लिए सही सिंटैक्स (यदि ऐसा वाक्य रचना भी मौजूद है) के बारे में पूछ हो गया है, लेकिन उदाहरण समस्या वास्तव में जरूरत प्रदर्शित नहीं करता है इस तरह के वाक्य रचना द्वारा हल किया जा करने के लिए। –

उत्तर

9

जेनेरिक गुण अधिक की तरह डेल्फी में समर्थित नहीं हैं होना चाहिए। केवल सामान्य वर्ग, या सामान्य तरीकों।

मैं दस्तावेज में कुछ भी है कि सीमा को स्पष्ट रूप से कहा गया है कि नहीं मिल रहा। दूसरी तरफ दस्तावेज केवल सामान्य वर्गों और जेनेरिक तरीकों का वर्णन करता है। और new language grammar to support generics भी गुणों का कोई उल्लेख नहीं करता है।

+1

यह सही है। –

1

मैं जेनरिक पर गति अप करने के लिए नहीं कर रहा हूँ, लेकिन नहीं घोषणा इस

type TMyClass<T: class> = class 
    protected 
    function GetCountBy<T>: Integer; 
    public 
    property CountBy<T>: Integer read GetCountBy<T>; 
    end; 
+0

@Lieveb, कक्षा में वस्तुओं की एक सूची है। मैं एक संपत्ति चाहता हूं कि किसी दिए गए वर्ग की वस्तुओं की गिनती वापस कर दे, इसलिए मुझे खुद को 'जेनेरिकिज्ड', केवल काउंटीबी संपत्ति में वर्गीकृत करने की आवश्यकता नहीं है। (मैं इसे एक समारोह के साथ कर सकता हूं, लेकिन मैं एक संपत्ति के रूप में लागू करना चाहता हूं)। –

+6

@ माइकसटन - आप इसके लिए जेनेरिक का उपयोग क्यों करेंगे? आप बस के रूप में 'संपत्ति CountBy [: TClass Aclass]: अपनी संपत्ति की घोषणा नहीं कर सकते हैं पूर्णांक GetCountBy पढ़ा;' –

+1

@Lieven: कोई है, जरूरी नहीं। एक सामान्य वर्ग में सामान्य तरीके हो सकते हैं। लेकिन मुझे नहीं लगता कि जेनेरिक गुणों को इस तरह से अनुमति है। एकमात्र समाधान वर्ग जेनेरिक और संपत्ति सामान्य नहीं है। –

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