2015-09-15 4 views
12

क्या एक ही नाम के साथ दो गुण हो सकते हैं?क्या एक ही नाम के साथ दो गुण हो सकते हैं?

property Cell [Cl, Rw: Integer]: string read getCell write setCell; 
property Cell [ColName: string; Rw: Integer]: string read getCellByCol write setCellByCol; 

ठीक है, मैंने कोशिश की और संकलक मुझे ऐसा करने नहीं देगा, लेकिन शायद एक चाल है ...?

+0

'ओवरलोड' भी मदद नहीं करेगा ... – Ampere

+0

आप 'variant' या' TField' के साथ एक विधि से चिपक सकते हैं जैसे पैरामीटर, जहां आप विधि में वास्तविक पास प्रकार निर्धारित करते हैं। –

+0

यह _is_ संभव - प्रकार का है। मेरा जवाब देखें ... – HeartWare

उत्तर

25

नहीं - लेकिन फिर: हाँ ... की क्रमबद्ध करें ...

function getP1(Cl,Rw : integer) : string; 
procedure setP1(C1,Rw : integer ; const s : string); 
function getP2(const Cl : string ; Rw : integer) : string; 
procedure setP2(const C1 : string ; Rw : integer ; const s : string); 
property P1[Cl,Rw : integer] : string read getP1 write setP1; default; 
property P1[const Cl : string ; Rw : integer] : string read getP2 write setP2; default; 

चाल संपत्ति के नाम एक ही है, और "डिफ़ॉल्ट" खंड के साथ दोनों को चिह्नित करने के लिए है। तो फिर तुम विभिन्न मापदंडों के साथ एक ही प्रॉपर्टी के नाम पर पहुंच सकता है:

P1['k',1]:=P1[2,1]; 
P1[2,1]:=P1['k',1]; 

संकलित fine.Don't पता है कि अगर यह offcially समर्थित है या अगर कोई इसके साथ कुछ अन्य समस्याओं है, लेकिन यह ठीक संकलित करता है तथा सही कॉल गेटर/सेटर (डेल्फी 2010 में परीक्षण)।

यह निश्चित रूप से केवल तभी काम करता है जब आप पहले से ही अपनी कक्षा के लिए डिफ़ॉल्ट संपत्ति का उपयोग नहीं करते हैं, क्योंकि एकमात्र तरीका यह है कि मैं इसे डिफ़ॉल्ट क्लॉज के माध्यम से कर सकता हूं।

+1

हां यह आधिकारिक तौर पर समर्थित है। डिफ़ॉल्ट संपत्ति आपको कक्षा को सरणी के रूप में एक्सेस करने की अनुमति देती है। अधिभार आपको विभिन्न तरीकों से 'सरणी' तक पहुंचने की अनुमति देता है। चूंकि पैरामीटर प्रकार भिन्न होते हैं तो कंपाइलर सही ओवरलोड को असंबद्ध करने में सक्षम होता है। ..... बेशक क्यों गैर डिफ़ॉल्ट सरणी गुणों के लिए इसकी अनुमति नहीं है मेरे लिए एक रहस्य है। – Johan

+0

धन्यवाद अवलोकन अवलोकन। आपका जवाब पढ़ने में वाकई दिलचस्प था। आप कैसे सोचते हैं, क्या इस उद्देश्य के लिए जेनेरिक का उपयोग करना संभव है? मैं वर्तमान में 'TDictionary ' पर सोच रहा हूं। –

+4

उपरोक्त, मैंने कुछ नया सीखा है! http://docwiki.embarcadero.com/RADStudio/Seattle/en/Properties#Array_Properties * किसी वर्ग में दिए गए हस्ताक्षर (सरणी पैरामीटर सूची) के साथ केवल एक डिफ़ॉल्ट संपत्ति हो सकती है, लेकिन डिफ़ॉल्ट संपत्ति को अधिभारित करना संभव है। वंश वर्गों में डिफ़ॉल्ट संपत्ति को बदलना या छिपाना अप्रत्याशित व्यवहार हो सकता है, क्योंकि संकलक हमेशा स्थिर रूप से गुणों से जुड़ता है। * – fantaghirocco

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