2013-07-27 4 views
9

मैं string प्रकार के लिए कुछ और कार्यों जोड़ने के लिए इस सहायक बनाया:क्या स्ट्रिंग प्रकार के लिए दो रिकॉर्ड हेल्पर्स का उपयोग करना संभव है?

type 
    AStringHelper = record helper for string 
    function Invert: string; overload; 
    function InvertMe: string; overload; 
    end; 

लेकिन जब मैं अपने कोड में इसका इस्तेमाल करते हैं, System.StrUtils में TStringHelper "बाहर हो जाता है" और मैं इसे कार्यों का उपयोग नहीं कर सकते ।

क्या दोनों को सह-अस्तित्व में रखना संभव है?

+1

एफडब्ल्यूआईडब्ल्यू, रिवर्स एक सामान्य रूप से इस्तेमाल किया जाने वाला नाम है जो मुझे लगता है कि आपका कार्य करता है। –

+0

मैं रिवर्स का भी उपयोग करता था ... – PSyLoCKe

उत्तर

11

अधिकतर एक सहायक आपके कोड में किसी एक बिंदु पर सक्रिय हो सकता है। documentation कहना है कि यह:

आप को परिभाषित करने और एक भी प्रकार के साथ सहयोगी कई सहायकों कर सकते हैं। हालांकि, स्रोत कोड में किसी भी विशिष्ट स्थान पर केवल शून्य या एक सहायक लागू होता है। निकटतम दायरे में परिभाषित सहायक लागू होगा। क्लास या रिकॉर्ड हेल्पर स्कोप सामान्य डेल्फी फैशन में निर्धारित है (उदाहरण के लिए, यूनिट के उपयोग खंड में बाईं ओर )।

चूंकि रिकॉर्ड सहायक सहायता विरासत का समर्थन नहीं करते हैं, इसलिए मानक सहायक सहायक की कार्यक्षमता को दोबारा लागू करने के अलावा मानक हेल्पर और आपके सहायक की कार्यक्षमता दोनों एक ही समय में सक्रिय होने का कोई तरीका नहीं है।

+0

दरअसल, पुन: कार्यान्वयन, पुन: कार्यान्वयन को लागू करने के लिए टीस्टिंगहेल्पर फ़ंक्शंस का उपयोग करके, आईओओ विरासत के बजाय एकत्रीकरण का उपयोग करके सबसे आसान होगा। –

+0

@ रुडीवेल्थियस: आप फिर से कार्यान्वित करने का क्या मतलब रखते हैं? क्या आप एक उदाहरण दे सकते हैं? –

+0

बस एक नया स्ट्रिंग सहायक लिखें और इसे लागू करने के लिए मौजूदा स्ट्रिंग सहायक का उपयोग करें। समस्या यह है कि एक सहायक के पास अपने स्वयं के आवृत्ति चर नहीं हो सकते हैं। –

2

यह करने के लिए एक सरल समाधान हो सकता है:

type 
    TStr = record 
    private 
    FStr:string; 
    public 
    function Invert: string; overload; 
    function InvertMe: string; overload; 
    end; 

कास्टिंग आप एक साधारण string चर पर TStr पर कार्यों का उपयोग कर सकते प्रकार का उपयोग करके:

var 
    s1,s2:string; 
begin 
    s1:='123456'; 
    s2:=TStr(s1).invert; 
end; 

लेकिन ज़ाहिर है, तो हम कर सकते हैं पूछो: क्यों न सिर्फ एक साधारण कार्य लिखें? :-)

वैसे भी, मुझे यह class/object/record पारंपरिक फ़ंक्शन/प्रक्रिया से विधि सिंटैक्स बेहतर पसंद है।

+0

क्योंकि दोस्तों को लगता है कि इस ऑब्जेक्ट विधि के तरीके बेहतर हैं और हमें उन्हें सीधे फ़ंक्शन कॉल के साथ मिश्रित नहीं करना चाहिए। : - / – PSyLoCKe

2

कोशिश अपने स्वयं के वर्ग और सहायक

TMyString = type string; 
TMyStringHelper = record helper for TMyString 
    function Invert: TMyString; 
    function ToString: string; 
end; 

स्ट्रिंग के बजाय TMyString उपयोग बनाने के लिए।

मानक स्ट्रिंग हेल्पर्स का उपयोग करने के लिए स्ट्रिंग() के साथ TMyString चर लपेटें या ToString विधि का उपयोग करें।

var 
    S1: TMyString; 
    S2: String; 
begin 
    S1 := ' 123456 '; 
    S1.Invert; 
    S2 := String(S1).Trim; 
    S2 := S1.ToString.Trim; 
end; 
संबंधित मुद्दे

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