2014-07-07 11 views
5

मेरे कोड में से किसी एक के माध्यम से जाने के दौरान, मैं एक कथन पर फंस गया हूं जो नीचे जैसा है।'प्रकार की' प्रकार की घोषणा का अर्थ क्या है?

TMyObjectClass = class of TMyObject;

मैं थोड़ा उलझन में हूँ, और सोच क्या इस बयान का अर्थ है। TMyObjectClass के रूप में कथन के ऊपर कोई घोषणा नहीं है।

और TMyObject नीचे के रूप में घोषणा हो रही है:

TMyObject = class(TObject) private //some private member declaration Public // some public variables end;

तो, मेरे सवाल है क्या बयान TMyObjectClass = class of TMyObject;

और कैसे काम करता है TMyObjectClass का अर्थ है?

मैं डेल्फी के लिए थोड़ा नया हूं, इसलिए कृपया मुझे इस तरह की घोषणा और कामकाज के बारे में कुछ जानकारी प्राप्त करने में मदद करें।

+3

आप इस विषय ['here'] (http://docwiki.embarcadero.com/RADStudio/XE/en/Class_References) के बारे में पढ़ सकते हैं। – TLama

उत्तर

14

यह Class Reference है।

वे मेटा कक्षाओं के साथ काम करने के लिए उपयोग किया जाता है। कैननिकल उदाहरण डेल्फी स्ट्रीमिंग फ्रेमवर्क है जो

TComponentClass = class of TComponent; 

यह वर्चुअल कंस्ट्रक्टर को गतिशील बाध्यकारी के लिए अनुमति देता है। TComponent कन्स्ट्रक्टर virtual है। स्ट्रीमिंग ढांचे को TComponent से प्राप्त कक्षाओं को तुरंत चालू करने की आवश्यकता है। यह बहुत कुछ इस तरह है:

var 
    ComponentClass: TComponentClass; 
    Component: TComponent; 
.... 
ComponentClass := GetComponentClassSomehowDoesntMatterHow; 
Component := ComponentClass.Create(Owner); 

अब, क्योंकि TComponent.Createvirtual है, यह एक बहुरूपी फैशन में स्वाभाविक है। यदि TComponentClassTButton है, तो TButton.Create कहा जाता है। यदि TComponentClassTPanel है, तो TPanel.Create कहा जाता है। और इसी तरह।

यह समझने की सबसे महत्वपूर्ण बात यह है कि निर्मित कक्षा केवल रनटाइम पर निर्धारित होती है। ध्यान दें कि कई भाषाओं में इस क्षमता की कमी है, विशेष रूप से सी ++।

+0

@ जेरी हाँ धन्यवाद –

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