2008-09-26 12 views
17

मैं इसे धाराप्रवाह इंटरफेस के लिए चाहता था। देखें, उदाहरण के लिए this चैनल 9 चर्चा। शायद require भी अनुक्रमित गुण जोड़ना होगा।एक्सटेंशन गुणों को सी # 4.0 में जोड़ा जाना चाहिए?

आपके विचार क्या हैं? क्या फायदे "भाषा अव्यवस्था" से अधिक होंगे?

+3

विषय पर एरिक लिपर्ट द्वारा इस दिलचस्प ब्लॉग पोस्ट को http://blogs.msdn.com/ericlippert/archive/2009/10/05/why-no-extension-properties.aspx – Jon

+0

उस लिंक को न दें चुस्त सुसमाचारियों के पास जाओ, वे सर्वश्रेष्ठ अजीब अल शैली में ROTFLOL करेंगे। आपने एक फीचर में एक टन काम किया है और केवल उसके बाद ही आपको प्राथमिक उपभोक्ता से फीडबैक मिलता है, अनुमान लगाओ क्या हुआ? –

उत्तर

6

मेरी पुस्तक में # 1 विस्तार गुणों के लिए सबसे महत्वपूर्ण कारण अज्ञात कोड के आसपास धाराप्रवाह इंटरफ़ेस पैटर्न लागू कर रहा है। मैं NHibernate सत्र के चारों ओर एक आवरण इसे और अधिक तो मैं

public bool IsInTransaction 
{ 
    get { return _session.Is().Not.Null && _session.Is().InTransaction; } 
} 

कौन सा बहुत बेवकूफ वह यह है कि एक विधि होना चाहिए लग रहा है के लिए इसी तरह तर्क कर सकते हैं के साथ काम करने intitutive बनाने के लिए बनाया के रूप में वहाँ मुझे डालने के लिए के लिए कोई रास्ता नहीं है एक संपत्ति के रूप में है जब तक कि मैं सत्र वस्तु पर सीधे स्रोत को संशोधित नहीं करता।

29

चूंकि गुण विधियों के लिए सिंटैक्टिक चीनी हैं, इसलिए मुझे नहीं लगता कि सी # में एक्सटेंशन गुणों के बिना एक्सटेंशन विधियां क्यों होनी चाहिए।

3

मुझे नहीं पता क्यों नहीं। गुण अलग वाक्यविन्यास के साथ सिर्फ गेटर/सेटर विधियां हैं।

1

मुझे लगता है कि यह बहुत अच्छा होगा, जब तक कि उनका उपयोग करने में कोई न्यूनतम प्रदर्शन न हो।

0

निश्चित रूप से हमारे निपटारे में उपकरणों के प्रदर्शन में शामिल होगा।

अब मेरी राय के लिए, हाँ उन्हें चाहिए, लेकिन किसी भी चीज़ की तरह, डेवलपर्स को इसे ठीक से उपयोग करने की आवश्यकता है और जब आवश्यक हो। अधिकांश नई सुविधाओं की तरह, बहुत से देव उन्हें पूरी तरह समझने के बिना और कब/कैसे/कहां/उनका उपयोग करने के लिए सबसे अच्छा उपयोग करते हैं। मुझे पता है कि मैं कभी-कभी इसमें भी चूस जाता हूं।

लेकिन हाँ, सुनिश्चित करें, इसे लाएं। मैं कुछ परिदृश्यों में इसका उपयोग कर देख सकता हूं

0

मुझे लगता है कि अनुक्रमित गुणों में अनुमान लगाया जा रहा है कि हम बड़े पैमाने पर महत्वपूर्ण वृद्धि के एक बड़े बैग के बीच एक स्टॉकिंग स्टफर होंगे जो हम 4.0 में देखेंगे।

2

मुझे नहीं लगता कि विस्तार गुण लगभग उपयोगी होंगे। मैं खुद को अधिकतर फ़ील्ड को घेरने के लिए गुणों का उपयोग करता हूं (क्लासिक get; set;) या केवल अच्छी भलाई प्रदान करने के लिए (केवल एक निजी, पठनीय, रचनात्मक-सेट फ़ील्ड पर मिलता है)। चूंकि एक्सटेंशन निजी सदस्यों तक नहीं पहुंच सकते हैं, इसलिए मुझे वास्तव में बिंदु नहीं दिखता है, खासकर "सेट;" के लिए। कुछ भी करने के लिए, "सेट;" वैसे भी अन्य तरीकों को कॉल करना होगा। फिर आप अपवाद फेंकने वाले गुणों के मुद्दे में भाग लेते हैं।
चूंकि एक्सटेंशन सार्वजनिक गुणों और विधियों का उपयोग करने के लिए सीमित हैं, इसलिए मुझे उपयोगिता वर्ग का उपयोग करने वाले कोड को पढ़ने के लिए यह क्लीनर और आसान लगता है। जब यह नीचे आता है, तो हम LINQ को सुंदर बनाने के लिए एक्सटेंशन विधियों का उपयोग कर रहे हैं। डेवलपर्स को गलत काम करने से रोकने के लिए, मैं अपने LINQ में यहां और वहां एक अतिरिक्त() से निपट सकता हूं और केवल विस्तार विधियों तक चिपक सकता हूं।

+0

बिंदु किसी भी अन्य वाक्य रचनात्मक चीनी – alpav

-3

नहीं, कोई संपत्ति केवल कोड के लिए जेनरेट की गई चीज़ों को छिपाने का एक तरीका है। आप परिलक्षित कोड को देखने या आईएल आप निर्धारित कर सकते क्या तुम सच में हो रही है और यह निम्नलिखित है:

public string MyProperty { get; set; } 

public string get_MyProperty(){ return <some generated variable>; } 
public string set_MyProperty(string value) { <some generated variable> = value; } 

हो जाता है यह सिर्फ 2 तरीकों है।

+0

के साथ एक ही बिंदु से निपटने का मुद्दा नहीं है, आप get_MyProperty() – recursive

+0

पर डेटाबेस नहीं कर सकते हैं, मुझे यह जवाब नहीं समझा है - क्या आप इसका मतलब है कि आप वकील नहीं हैं नियमित गुण या तो? –

+0

नहीं, मैं बस यह इंगित कर रहा हूं कि संपत्ति की अवधारणा एक आईडीई अवधारणा है, आईएल किसी संपत्ति की तरह दिखने वाली किसी चीज़ का समर्थन नहीं करता है। आप get_MyProperty (यह ऑब्जेक्ट ओ) {...} के साथ समान कार्यक्षमता प्राप्त कर सकते हैं। निश्चित रूप से यह वही वाक्य रचनात्मक चीनी नहीं है जिसका हम उपयोग कर रहे हैं लेकिन यह वही समग्र परिणाम है। –

1

ऐसा लगता है कि इसे आसानी से दुरुपयोग किया जा सकता है। जैसा कि अन्य ने उल्लेख किया है, सी # गुण विधियों के लिए सिर्फ वाक्य रचनात्मक चीनी हैं। हालांकि, गुणों के रूप में उनको कार्यान्वित करने के कुछ निश्चित अर्थ हैं: एक्सेसिंग के दुष्प्रभाव नहीं होंगे और संपत्ति को संशोधित करना बहुत सस्ता होना चाहिए। उत्तरार्द्ध बिंदु महत्वपूर्ण है क्योंकि ऐसा लगता है कि विस्तार गुण लगभग हमेशा पारंपरिक गुणों की तुलना में अधिक महंगा होंगे।

9

यह डाटाबेसिंग के बारे में है, मान लें कि मेरे पास मेरे यूआई को बाध्य करने का ऑब्जेक्ट है और मैं ऑब्जेक्ट के अन्य गुणों के आधार पर इसे छिपाना चाहता हूं। मैं IsVisible या दृश्यता के लिए एक विस्तार संपत्ति जोड़ सकता हूं और उस संपत्ति को UI पर बांध सकता हूं।

आप एक्सटेंशन विधियों को बाध्य नहीं कर सकते हैं, लेकिन मौजूदा प्रकार के डाटाबेसिंग के लिए गुण जोड़ने में सक्षम होने के कारण आप बहुत उपयोगी हो सकते हैं।

+0

हां, मुझे इसे डाटाबेसिंग के लिए भी चाहिए !!!! – tbone

+1

यह काम नहीं करेगा: डेटा बाध्यकारी गुणों को प्राप्त करने के लिए बाध्य ऑब्जेक्ट के प्रकार पर प्रतिबिंब का उपयोग करता है। एक विस्तार संपत्ति दूसरे मनमानी दूसरे प्रकार में मौजूद होगी जो बाध्यकारी ढांचे का कोई ज्ञान नहीं होगा। विस्तार विधियां (और गुण, यदि वे मौजूद थे) एक संकलन-समय सुविधा है जिसमें कोई रनटाइम खोज नहीं है। –

+1

इस पर विकल्प हैं (मुझे पता है कि मुझे जवाब देने में देर हो चुकी है, लेकिन सिर्फ यह जवाब देखा गया है), डेटाबेस का उपयोग करने वाले कुछ इंटरफेस को लागू करने वाले संग्रहों का उपयोग करके, आप संग्रह को और अधिक बाध्यकारी गुण जोड़ सकते हैं। दूसरे शब्दों में, संग्रह के लिए अविश्वसनीय संपत्ति की गणना करने के लिए नुस्खा देकर, आप इसे ग्रिड या इसी तरह से बांध सकते हैं। बेशक, यदि आप इसे किसी टेक्स्टबॉक्स या इसी तरह से बांधना चाहते हैं, तो आप शायद भाग्य से बाहर हैं। –

0

डेवलपर्स को नामों के पदानुक्रम को व्यवस्थित करने और ऊंट के आवरण या अंडरस्कोर के साथ नाम संयोजन से बचने के लिए गुणों का उपयोग करना चाहिए। उदाहरण के लिए, HttpUtility.UrlDecode के बजाय उन्हें "कुछ str" जैसे कुछ का उपयोग करने के लिए स्ट्रिंग क्लास का विस्तार करना चाहिए .decode.url वर्तमान में सी # में ऐसा करने का एकमात्र तरीका यह है: "कुछ str" .decode()। Url

1

एक अच्छी बात होगी, लेकिन मुझे लगता है कि कई लोग यह कहते हैं कि वे डेटा बाध्यकारी के लिए चाहते हैं जो प्रतिबिंब का उपयोग करने के बाद से संभव नहीं है।

0

हाँ, कृपया।

और अनुक्रमित गुण और स्टेटिक एक्सटेंशन सामान भी जोड़ें, क्योंकि मैं गंभीर रूप से सिस्टम के लिए चाहता हूं। कंसोल (यह एक मजाक के रूप में नहीं है!)।

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

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