2012-06-18 16 views
6

मैंने गहरी कक्षा पदानुक्रम के आधार वर्ग में कक्षा चर जोड़ा है। यह प्रति वर्ग प्रकार के उदाहरणों की संख्या को गिनने के इरादे से एक पूर्णांक है। लेकिन मैंने एक समस्या में भाग लिया है।डेल्फी कक्षा परिवर्तनीय प्रति वर्ग

को देखते हुए उदाहरण:

TBaseClass = class 
    private 
    class var fCreated: integer; 
    public 
    class function NewInstance: TObject; override; 
    end; 

    TDescendant = class(TBaseClass) 
    end; 

    ... 

    class function TBaseClass.NewInstance: TObject; 
    begin 
    result := inherited NewInstance; 
    inc(fCreated); 
    end; 

मैं मान लिया है कि मैं कक्षा प्रति बनाया उदाहरणों की संख्या स्टोर करने के लिए वर्ग वर उपयोग कर सकते हैं, लेकिन इस मामले होने के लिए प्रतीत नहीं होता।

TDescendant.fCreated रूप TBaseClass.fCreated रिटर्न एक ही मूल्य का निरीक्षण करने से एक को बदलने में निरीक्षक के माध्यम से, अन्य बदलता है तो यह अगर fCreated एकल वैश्विक वर के रूप में व्यवहार करता है।

मुझे प्रति वर्ग प्रकार बनाए रखने के लिए fCreated की उम्मीद है, क्या यह मुद्दा नहीं है? मैं क्या खो रहा हूँ ?

उत्तर

8

आप कुछ भी नहीं खो रहे हैं। कक्षा चर कैसे काम करते हैं इसका आपका विश्लेषण सही है। कक्षा वर्ग एक वैश्विक चर से अधिक कुछ नहीं है जो वर्ग द्वारा स्कॉप्ड किया जाता है।

आपके लिए एक आसान समाधान उदाहरणों की गणना करने के लिए एक शब्दकोश का उपयोग करना है। मेरा एक चाल का उपयोग करने के लिए एक और हैकी दृष्टिकोण है कि हॉलवार्ड वासबॉटन ने ब्लॉग किया है, जो (एबी) कक्षा-विशिष्ट क्षेत्रों को स्टोर करने के लिए वीएमटी का उपयोग करता है। आप इसके बारे में here पढ़ सकते हैं।

+0

वही टिप्पणी पहले ही यहां दी गई थी: http://stackoverflow.com/a/72496/12170 – PatrickvL

+0

हैकी जो मैं चाहता था –

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