सेट और अन्य सरल प्रकार के लिए डेल्फी रिकॉर्ड हेल्पर्स

डेल्फी क्लास (और रिकॉर्ड) हेल्पर्स को समझना डेल्फी भाषा की एक विशेषता का परिचय देता है जिससे आप मौजूदा कक्षाओं और रिकॉर्डों के लिए कार्यों और प्रक्रियाओं (विधियों) को जोड़कर एक वर्ग या रिकॉर्ड प्रकार की परिभाषा का विस्तार कर सकते हैं। विरासत.

XE3 डेल्फी संस्करण में, स्ट्रिंग, पूर्णांक, एनम, सेट और एक जैसे सरल डेल्फी प्रकारों को विस्तारित करने की अनुमति देकर रिकॉर्ड सहायक अधिक शक्तिशाली हो गए।

प्रणाली। डेल्फी XE3 से SysUtils इकाई, "TStringHelper" नामक एक रिकॉर्ड को लागू करती है जो वास्तव में स्ट्रिंग्स के लिए एक रिकॉर्ड सहायक है।

डेल्फी एक्सई 3 का उपयोग करके आप अगले कोड को संकलित और उपयोग कर सकते हैं:

वर
s: स्ट्रिंग; शुरू
s: = 'डेल्फी एक्सई 3'; रों। बदलें ('XE3', 'नियम', [])। ToUpper; समाप्त; 

यह संभव हो, इसके लिए डेल्फी में एक नया निर्माण किया गया था "सरल प्रकार] के लिए रिकॉर्ड सहायक"। स्ट्रिंग्स के लिए, यह "स्ट्रिंग के लिए TStringHelper = रिकॉर्ड सहायक" है। नाम "रिकॉर्ड सहायक" बताता है, लेकिन यह विस्तार करने के बारे में नहीं है अभिलेख - बल्कि सरल प्रकार जैसे स्ट्रिंग्स, पूर्णांक और एक जैसे विस्तार के बारे में।

instagram viewer

सिस्टम और सिस्टम में। SysUtils सरल प्रकारों के लिए अन्य पूर्वनिर्धारित रिकॉर्ड हेल्पर्स हैं, जिनमें शामिल हैं: TSingleHelper, TDoubleHelper, TExtendedHelper, TGuidHelper (और कुछ अन्य)। आप नाम से प्राप्त कर सकते हैं कि सहायक किस सरल प्रकार का विस्तार करता है।

कुछ आसान ओपन सोर्स हेल्पर्स भी हैं, जैसे TDateTimeHelper.

Enumerations? गणना के लिए सहायक?

enumerations
सेट

गणना और सेट को सरल प्रकार के रूप में माना जा रहा है, अब (XE3 और उससे आगे भी) कार्यक्षमता के साथ बढ़ाया जा सकता है एक रिकॉर्ड प्रकार हो सकता है: फ़ंक्शन, प्रक्रियाएं और समान।

यहाँ एक सरल गणना ("TDay") और एक रिकॉर्ड सहायक है:

प्रकार
TDay = (सोमवार = 0, मंगलवार, बुधवार, गुरुवार, शुक्रवार, शनिवार, रविवार); टडायहेल्पर = के लिए रिकॉर्ड सहायक TDay। समारोह AsByte: बाइट; समारोह तार: तार; समाप्त; 
समारोह TDayHelper। AsByte: बाइट; शुरू
परिणाम: = बाइट (स्व); समाप्त; समारोह TDayHelper। तार: तार; शुरूमामला स्वयं का
सोमवार: परिणाम: = 'सोमवार'; मंगलवार: परिणाम: = 'मंगलवार'; बुधवार: परिणाम: = 'बुधवार'; गुरुवार: परिणाम: = 'गुरुवार'; शुक्रवार: परिणाम: = 'शुक्रवार'; शनिवार: परिणाम: = 'शनिवार'; रविवार: परिणाम: = 'रविवार'; समाप्त; समाप्त; 
वर
aDay: TDay; s: स्ट्रिंग; शुरू
aDay: = TDay। सोमवार; s: = aDay। तार। नीचा करना; समाप्त; 
एक डेल्फी Enum को एक स्ट्रिंग प्रतिनिधित्व में परिवर्तित करें

सेट? सेट के लिए हेल्पर?

टिड्डे = समुच्चय TDay; 
वर
दिन: टेडेज़; s: स्ट्रिंग; शुरू
दिन: = [सोमवार.. WEDNESDAY]; दिन: = दिन + [रविवार]; समाप्त; 

लेकिन, यह कैसे करने में सक्षम हो जाएगा:

वर
दिन: टेडेज़; बी: बूलियन; शुरूदिन: = [सोमवार, मंगलवार] बी: = दिन। इंटरसेक्ट ([सोमवार, गुरुवार])। IsEmpty;
प्रकार
TDaysHelper = के लिए रिकॉर्ड सहायक TDays। समारोह इंटरसेक्ट (स्थिरांक दिन: TDays): TDays; समारोह IsEmpty: बूलियन; समाप्त;... समारोह TDaysHelper। इंटरसेक्ट (स्थिरांक दिन: TDays): TDays; शुरू
परिणाम: = स्व * दिन; समाप्त; समारोह TDaysHelper। IsEmpty: बूलियन; शुरू
परिणाम: = स्व = []; समाप्त; 

एक गणना के आसपास निर्मित प्रत्येक सेट प्रकार के लिए आपको एक अलग सहायक की आवश्यकता होगी, दुर्भाग्य से, गणना और सेट साथ नहीं चलते हैं जेनेरिक और जेनेरिक प्रकार.

इसका मतलब है कि निम्नलिखित को संकलित नहीं किया जा सकता है:

// ALIKE का कोई संकलन नहीं!
TGenericSet = का सेट ; 
टेनम सरल जेनरिक एनम उदाहरण

बाइट के सेट के लिए रिकॉर्ड हेल्पर!

प्रकार
टीबीटीसेट = समुच्चय बाइट; TByteSetHelper = के लिए रिकॉर्ड सहायक TByteSet। 

हम TByteSetHelper की परिभाषा में निम्नलिखित हो सकते हैं:

जनताप्रक्रिया स्पष्ट; प्रक्रिया शामिल(स्थिरांक मूल्य: बाइट); अधिभार; पंक्ति में; प्रक्रिया शामिल(स्थिरांक मान: TByteSet); अधिभार; पंक्ति में; प्रक्रिया निकालना(स्थिरांक मूल्य: बाइट); अधिभार; पंक्ति में; प्रक्रिया निकालना(स्थिरांक मान: TByteSet); अधिभार; पंक्ति में; समारोह इंटरसेक्ट (स्थिरांक मान: TByteSet): TByteSet; पंक्ति में; समारोह IsEmpty: बूलियन; पंक्ति में; समारोह शामिल है (स्थिरांक मूल्य: बाइट): बूलियन; अधिभार; पंक्ति में;समारोह शामिल है (स्थिरांक मान: TByteSet): बूलियन; अधिभार; पंक्ति में;समारोह IsSuperSet (स्थिरांक मान: TByteSet): बूलियन; पंक्ति में; समारोह IsSubSet (स्थिरांक मान: TByteSet): बूलियन; पंक्ति में; समारोह बराबरी (स्थिरांक मान: TByteSet): बूलियन; पंक्ति में; समारोह तार: तार; पंक्ति में; समाप्त; 
{TByteSetHelper}प्रक्रिया TByteSetHelper। शामिल करें (कास्ट वैल्यू: बाइट); शुरू
प्रणाली। शामिल करें (स्वयं, मूल्य); समाप्त; प्रक्रिया TByteSetHelper। बाहर निकालें (कास्ट मूल्य: बाइट); शुरू
प्रणाली। बहिष्कृत (स्वयं, मूल्य); समाप्त; प्रक्रिया TByteSetHelper। स्पष्ट; शुरू
स्व: = []; समाप्त; समारोह TByteSetHelper। बराबरी (कास्ट वैल्यू: टीबीटीसेट): बूलियन; शुरू
परिणाम: = स्व = मूल्यों; समाप्त; प्रक्रिया TByteSetHelper। बहिष्कृत करें (const मान: TByteSet); शुरू
स्व: = आत्म - मूल्य; समाप्त; प्रक्रिया TByteSetHelper। शामिल करें (कास्ट मान: TByteSet); शुरू
स्व: = स्व + मान; समाप्त; समारोह TByteSetHelper। शामिल हैं (कॉन्स्टेबल मान: TByteSet): बूलियन; शुरू
परिणाम: = IsSuperSet (मान); समाप्त; समारोह TByteSetHelper। इंटरसेक्ट (कॉन्स्टेबल वैल्यूज़: टीबीटीसेट): टीबीटीसेट; शुरू
परिणाम: = स्व * मान; समाप्त; समारोह TByteSetHelper। शामिल (कास्ट वैल्यू: बाइट): बूलियन; शुरू
परिणाम: = स्वयं में मूल्य; समाप्त; समारोह TByteSetHelper। IsEmpty: बूलियन; शुरू
परिणाम: = स्व = []; समाप्त; समारोह TByteSetHelper। IsSubSet (const मान: TByteSet): बूलियन; शुरू
परिणाम: = स्व <= मान; समाप्त; समारोह TByteSetHelper। IsSuperSet (कास्ट मान: TByteSet): बूलियन; शुरू
परिणाम: = स्व> = मान; समाप्त; समारोह TByteSetHelper। स्ट्रिंग: स्ट्रिंग; वर
बी: बाइट; शुरूके लियेमें स्वयं कर
परिणाम: = result + IntToStr (b) + ','; परिणाम: = कॉपी (परिणाम, 1, -2 + लंबाई (परिणाम)); समाप्त; 
वर
दिनएबाइट्स: टीबीटीसेट; शुरू
daysAsByteSet। स्पष्ट; daysAsByteSet। सोमवार शामिल करें। AsByte); daysAsByteSet। शामिल करें (पूर्णांक (शनिवार)); daysAsByteSet। शामिल करें (बाइट (टीडीए) मंगलवार)); daysAsByteSet। शामिल करें (Integer (TDay) बुधवार)); daysAsByteSet। शामिल करें (Integer (TDay) बुधवार)); // 2 बार - कोई मतलब नहीं। daysAsByteSet। बहिष्कृत (टीडीए)। मंगलवार। AsByte); ShowMessage (daysAsByteSet) तार); ShowMessage (BoolToStr (daysAsByteSet) IsSuperSet ([सोमवार। AsByte, शनिवार। AsByte]), सच)); समाप्त; 

वहाँ एक है :(

ध्यान दें कि TByteSet बाइट मूल्यों को स्वीकार करता है - और इस तरह के किसी भी मूल्य को यहां स्वीकार किया जाएगा। TByteSetHelper जैसा कि ऊपर लागू किया गया है, गणना प्रकार सख्त नहीं है (यानी आप इसे गैर टीडीए मूल्य के साथ फ़ीड कर सकते हैं ...) लेकिन जब तक मैं जागरूक हूँ.. यह मेरे लिए काम करता है।

instagram story viewer