के साथ अद्वितीय पूर्णांक मान को जोड़ने की आवश्यकता है ठीक है, इसलिए मेरे पास एक बेस क्लास है जिसे हम TFruit
पर कॉल करेंगे। इससे TApple
, TOrange
और इसी तरह के विभिन्न वंशज हैं। मुझे वंश की कक्षाओं के गुणों को एक फ़ाइल में सहेजने की ज़रूरत है।वर्ग
आदेश जब डेटा लोड हो रहा सही वर्ग बनाने के लिए सक्षम होने के लिए, हर वर्ग के एक ID
है कि मैं वास्तविक डेटा लिखने से पहले फ़ाइल पर लिखने की जरूरत है। वर्तमान में, मैं यह कर के निम्नलिखित तरीके से ले कर आए हैं:
type
TFruit = class
const ID = 0;
end;
TApple = class(TFruit)
const ID = 1;
end;
TOrange = class(TFruit)
const ID = 2;
end;
परीक्षण इस, मुझे पता चला कि मैं सुपर सावधान जो वर्ग मैं घोषणा होने की जरूरत है। अगर मैं इस का उपयोग करें:
var Fruit: TFruit;
Fruit := TOrange.Create;
... तो Fruit.ID
शून्य वापस आ जाएगी। हालांकि, घोषित करने Fruit
एक TOrange
के रूप में निकलेगा अपेक्षित परिणाम Fruit.ID = 2
(किसी को पता क्यों?)
तो मूल रूप से, मैं यह सही कर रहा हूँ या वहाँ यह करने के लिए एक बेहतर तरीका है? क्लास फ़ंक्शन बनाने और वहां से एक मूल्य वापस करने से तुलनात्मक रूप से बहुत बदसूरत लगता है (अतिरिक्त फ़ंक्शन घोषणा, कार्यान्वयन और कोड)।
सुविधा के लिए कोई उस वर्ग की आईडी लौटाए गए पंजीकृत ऑब्जेक्ट्स के बेस-क्लास में क्लास विधि जोड़ सकता है। और चूंकि कक्षा के तरीके (सी # शैली स्थिर विधियों के विपरीत) वर्ग-प्रकार को 'स्वयं' पैरामीटर के रूप में प्राप्त करते हैं, यह अपेक्षा के अनुसार काम करता है। – CodesInChaos
@CodeInChaos, सच है, लेकिन प्रत्येक कक्षा को इसकी पहचान करने के लिए "आईडी" की आवश्यकता होगी, जिसे इससे बचा जा सकता है और यह पता लगाने के लिए कि क्या अगली उपलब्ध आईडी है, यह जानने में नई वंशज पैदा हो रही है। –
मेरा मतलब यह नहीं है कि यह विधि आपके 'FindID' फ़ंक्शन को' स्वयं 'के साथ सर्वो के रूप में कॉल करती है। लेकिन यह आर्किटेक्चररी रूप से बेहतर हो सकता है अगर वर्ग स्वयं आईडी के बारे में नहीं जानते हैं क्योंकि उन्हें धारावाहिक के कार्यान्वयन के विवरण के रूप में माना जा सकता है। – CodesInChaos