सी # एक्सटेंशन के तरीके वास्तुकला प्रश्न

वोट
4

मैं हाल ही में इस प्रश्न पूछा: संकलक त्रुटि को संदर्भित कस्टम सी # विस्तार विधि

मार्क Gravell जवाब सही था और यह मेरी समस्या हल। लेकिन यह मुझे कुछ के बारे में सोचना दिया ...

एक्सटेंशन विधि एक स्टेटिक क्लास पर रखा जाना चाहिए और और विधि ही स्थिर होने चाहिए, इसलिए हम एक स्थिर एक्सटेंशन विधि नहीं बना सकता?

मैं समझता हूँ कि पैरामीटर के रूप में चिह्नित इस वस्तु हम बढ़ा रहे हैं का एक उदाहरण के लिए उपयोग की अनुमति के लिए इस्तेमाल किया जाएगा। क्या मुझे समझ नहीं आता क्यों एक विधि स्थिर होने के लिए नहीं बनाया जा सकता ... यह सिर्फ मुझे लगता है कि यह एक बेहोश सीमा है है ...

मेरा प्रश्न है: हम एक विस्तार विधि है कि एक स्थिर विधि के रूप में काम करेंगे क्यों नहीं बना सकता?

12/03/2009 को 15:27
का स्रोत उपयोगकर्ता
अन्य भाषाओं में...                            


4 जवाब

वोट
7

मैं उम्मीद असली जवाब बस है: वहाँ एक अच्छा यूज-केस नहीं था। उदाहरण के लिए, लाभ यह है कि मौजूदा प्रकार पर एक धाराप्रवाह-एपीआई (जो अपने आप तर्क प्रदान नहीं करते हैं) के लिए सक्षम बनाता है - यानी

var foo = data.Where(x=>x.IsActive).OrderBy(x=>x.Price).First();

जो LINQ सक्षम बनाता है:

var foo = (from x in data
           where x.IsActive
           order by x.Price
           select x).First();

स्थिर तरीकों के साथ, यह केवल एक मुद्दा नहीं है, इसलिए वहाँ कोई औचित्य है; सिर्फ दूसरे प्रकार पर स्थिर विधि का उपयोग करें।

यह है के रूप में, विस्तार के तरीकों नहीं कर रहे हैं ठीक से केंद्रित वस्तु - वे जीवन पवित्रता की कीमत पर आसान बनाने के लिए एक व्यावहारिक दुरुपयोग कर रहे हैं। वहाँ एक ही तरह से स्थिर तरीकों को कमजोर करने का कोई कारण नहीं था।

12/03/2009 को 15:33
का स्रोत उपयोगकर्ता

वोट
3

क्योंकि उस सुविधा सी # में मौजूद नहीं है।

समाधान के लिए, स्थिर तरीकों किसी अन्य वर्ग में लागू और उस वर्ग के माध्यम से कहा जाता है सुविधा प्रदान करने जा सकता है।

उदाहरण के लिए, XNA एक है MathHelper वर्ग जो आदर्श के लिए स्थिर एक्सटेंशन हो गया होता गणित वर्ग।

समुदाय है पूछ अगर हमें लगता है इसके लिए एक अच्छा विचार है सी # 4.0

12/03/2009 को 15:32
का स्रोत उपयोगकर्ता

वोट
1

मेरी सोच संगतता के लिए हो सकता है - यदि आप अचानक इस ऑपरेटर यदि आपने अनजाने में कोड जो अब एक विस्तार विधि के साथ एक सामान्य विधि अधिभावी है टूट सकता की आवश्यकता के साथ सभी स्थैतिक तरीकों विस्तार तरीकों बनाया है।

इस पैरामीटर अनुकूलता का उल्लंघन नहीं करती नियंत्रण की अनुमति देता है और इस तरह।

बस एक विचार है, हालांकि।

12/03/2009 को 15:45
का स्रोत उपयोगकर्ता

वोट
0

सबसे पहले आप अभी तक एक और वाक्य रचना इंगित करने के लिए आप मौजूदा प्रकार के स्थिर तरीकों का विस्तार करना चाहते जोड़ना होगा। जब वाक्य रचना का विस्तार तुम सच में ऐसा करने के लिए एक बहुत अच्छा कारण की जरूरत है।

कल्पना मैं एक वर्ग कहा जाता MyExts जो मुझे MyClass के विस्तार के तरीकों को जोड़ने की अनुमति देता है। क्यों होता:-

MyClass.DoSomethingExtra();

की तुलना में बेहतर

MyExts.DoSomethingExtra();

?

12/03/2009 को 15:34
का स्रोत उपयोगकर्ता

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more