2016-07-15 9 views
7

मैं जो मैं बंदरगाह के लिए कोशिश कर रहा हूँ डेल्फी मार्ग-परिवर्तन पुस्तकालय में इस कोड है में कीवर्ड?डेल्फी "डिफ़ॉल्ट" रिकॉर्ड प्रकार के साथ पुराने डेल्फी संस्करणों

FillChar(Inst, SizeOf(TInstruction), 0); 

मेरी धारणा सही है: मैं कुछ की तरह मान ?

+0

यह प्रबंधित प्रकारों के क्षेत्रों को भी अंतिम रूप देता/प्रारंभ करता है। –

+0

@LURD, मैं "प्रारंभिक" भाग को समझ सकता हूं। लेकिन यह चर वैरिएबल को कब करता है? उदाहरण के लिए – zig

+0

@zig, गतिशील सरणी और डंक से स्मृति साफ़ करना, यदि हटाया गया रिकॉर्ड अंतिम संदर्भ था। एक और उदाहरण 'इंटरफेस' प्रकार संदर्भ-गिनती वस्तुओं को अनलिंक कर रहा है। docwiki.embarcadero.com/Libraries/XE7/en/System देखें। –

उत्तर

13

Default() जेनिक्स का समर्थन करने के लिए पेश किया गया एक अनियंत्रित आंतरिक कार्य है। डेल्फी जेनेरिकों का डिज़ाइन बहुत से .NET जेनेरिक द्वारा प्रेरित था और आपको .net: https://msdn.microsoft.com/en-GB/library/xwth0h0d.aspx

Default() का उद्देश्य आपको एक चर प्रारंभ करने के लिए डिफ़ॉल्ट रूप से अनुमति देने के लिए है। जेनेरिक प्रकारों के साथ काम करते समय Default() आपको ऐसे चर के लिए ऐसा करने की अनुमति देता है जिसका प्रकार सामान्य है।

आप को दोहराने के लिए Default() के व्यवहार निम्न कार्य करें:

Finalize(Inst); 
FillChar(Inst, SizeOf(Inst), 0); 

Finalize करने के लिए कॉल के मामले में की जरूरत है प्रकार किया जाता है। ऐसा होता है कि प्रकार प्रबंधित होता है, या प्रबंधित किए गए किसी भी सदस्य को शामिल किया जाता है। प्रबंधित प्रकारों में तार, गतिशील सरणी, इंटरफेस, वेरिएंट, अज्ञात विधियां इत्यादि शामिल हैं

यदि प्रकार में प्रबंधित प्रकार नहीं होते हैं तो Finalize पर कॉल छोड़ा जा सकता है। हालांकि इसे शामिल करने में कोई दिक्कत नहीं होती है, क्योंकि यदि आवश्यक नहीं है तो संकलक इसे खत्म कर देगा। यदि आप 100% निश्चित हो सकते हैं कि किसी प्रबंधित प्रकार को कोई मान निर्दिष्ट नहीं किया गया है तो आप उस कॉल को भी छोड़ सकते हैं। सांख्यिक प्रकार के लिए

  • शून्य:

    डिफ़ॉल्ट प्रारंभ निम्नलिखित का मतलब है।

  • गणनात्मक प्रकारों के लिए क्रमिक शून्य के साथ मान।
  • False बूलियन प्रकार के लिए।
  • #0 चरित्र प्रकारों के लिए।
  • तारों के लिए खाली स्ट्रिंग।
  • Variant के लिए खाली संस्करण। कक्षाओं, गतिशील सरणी, इंटरफेस और अज्ञात तरीकों के लिए
  • nil
+0

कंपाइलर संकेत: '[संकेत] DDetours.pas (1 9 1 9): अभिव्यक्ति को प्रारंभ/अंतिम रूप देने की आवश्यकता नहीं है। तो, क्या मुझे बस 'अंतिमकरण (इंस्टीट्यूट) को हटा देना चाहिए, या क्या मुझे संकेत बंद करना चाहिए? – zig

+0

आप तक। इसे किसी भी तरह से करो। मैं शायद अंतिम रूप को हटा दूंगा। –