मैं बनाने के लिए क्या मैं डेल्फी 2007 में एक कक्षा फैक्टरी मैं एक समारोह में एक व्युत्पन्न वर्ग प्रकार पारित करने के लिए चाहते हैं और यह उस वर्ग प्रकार का ऑब्जेक्ट का निर्माण किया है होना करने के लिए समझ में कोशिश कर रहा हूँ।मेटाक्लास क्लास फैक्ट्री के माध्यम से तत्काल होने पर व्युत्पन्न कन्स्ट्रक्टर को क्यों नहीं कहा जाता है?
मैं ऐसे How can I create an Delphi object from a class reference and ensure constructor execution? के रूप में कुछ अच्छे संदर्भ, मिल गया है, लेकिन मैं अभी भी यह काफी सही काम करने के लिए नहीं मिल सकता है। नीचे दिए गए परीक्षण में, मैं इसे व्युत्पन्न कन्स्ट्रक्टर को कॉल करने के लिए नहीं मिल सकता, भले ही डीबगर मुझे बताता है कि ओक्लास टीसीडीडिव है।
मुझे लगता है कि मैं यहां कुछ मौलिक के बारे में उलझन में हूं और कुछ स्पष्टीकरण का उपयोग कर सकता हूं। धन्यवाद।
program ClassFactoryTest;
{$APPTYPE CONSOLE}
uses
SysUtils;
// BASE CLASS
type
TMyBase = class(TObject)
bBaseFlag : boolean;
constructor Create; virtual;
end;
TMyBaseClass = class of TMyBase;
constructor TMyBase.Create;
begin
bBaseFlag := false;
end;
// DERIVED CLASS
type
TMyDerived = class(TMyBase)
bDerivedFlag : boolean;
constructor Create;
end;
constructor TMyDerived.Create;
begin
inherited;
bDerivedFlag := false;
end;
var
oClass: TMyBaseClass;
oBaseInstance, oDerivedInstance: TMyBase;
begin
oClass := TMyBase;
oBaseInstance := oClass.Create;
oClass := TMyDerived;
oDerivedInstance := oClass.Create; // <-- Still calling Base Class constructor
end.
+1, लेकिन ... 'आभासी कंस्ट्रक्टर्स छोड़ करने और बस AfterConstruction.' Urgh कैसे बहुत भ्रमित करने वाले गैर मानक ओवरराइड है। कृपया रचनाकारों के साथ चिपके रहें – Johan
इसके लिए 'AfterConstruction' का उपयोग करने में एकमात्र समस्या यह है कि यह इरादा स्पष्ट नहीं करता है। उप-वर्गीकृत कन्स्ट्रक्टर को उपclass करना और जोड़ना आसान होगा। एक आभासी कन्स्ट्रक्टर यह स्पष्ट करता है। उस ने कहा, अगर आपने यह गलती की है, तो आपका कोड काम नहीं करेगा जो मुझे हमेशा एक उत्कृष्ट सुरक्षा नेट माना जाता है! –