2011-01-18 15 views
19

मुझे एक मुश्किल तरीका है कि किसी विधि को एक विधि विधि के रूप में कार्यान्वित करना और स्टैंड-अलोन विधि के रूप में विधि को कार्यान्वित करना कब होता है। यह निर्धारित करने में लोगों का पालन करने के कुछ सर्वोत्तम अभ्यास क्या हैं?विस्तार के तरीके बनाम नियमित तरीके - सर्वोत्तम अभ्यास विचार

उत्तर

20

एक विस्तार विधि का उपयोग करें, तो निम्न स्थितियों में से कोई भी सत्य हैं:

  • तुम एक प्रकार पर एक विधि की जरूरत है और आप स्रोत स्वामी नहीं हैं।
  • आपको एक प्रकार की विधि की आवश्यकता है, आप स्रोत के स्वामी हैं, और प्रकार एक इंटरफ़ेस है।
  • तुम एक प्रकार पर एक विधि की जरूरत है, तो आप ही स्रोत कर , लेकिन विधि जोड़ने अवांछित युग्मन पैदा करता है। *

अन्यथा, आप वास्तविक प्रकार पर ही कोई वास्तविक विधि का उपयोग करना चाहिए।

मुझे नहीं लगता कि यह उस वर्ग या संरचना के लिए एक विस्तार विधि बनाने के लिए पूरी तरह से समझ में आता है जिसके लिए आप स्रोत हैं - नियमित विधि पर्याप्त होने पर पाठकों को विस्तार विधि के साथ भ्रमित क्यों करें?

सुझाई पढ़ने:Framework Design Guidelines: Extension Methods

* कल्पना कीजिए कि आप एक विशेष प्रकार के सुविधा तरीकों जोड़ना चाहते थे लेकिन विधानसभाओं या प्रकार है कि एपीआई का हिस्सा नहीं होना चाहिए करने के लिए निर्भरता बनाने के लिए नहीं करना चाहती। आप इसे प्रबंधित करने के लिए विस्तार विधियों का उपयोग कर सकते हैं।

+6

एक अन्य मामले मैं जोड़ना होगा: आप एक प्रकार पर एक विधि की जरूरत है आप स्रोत के मालिक हैं, लेकिन विधि अन्यथा एक युग्मन बनाना चाहती है जो वांछित नहीं है। – JaredPar

+0

@ जेरेड - अच्छा बिंदु - मैं इसे जोड़ दूंगा! –

2

Try this Stackoverflow post for a discussion about extension method best practices.

मेरे दृष्टिकोण से मैं विस्तार तरीकों का उपयोग जब मैं एक विशेष प्रकार के लिए उपयोगिता कार्यों के एक बहुत कुछ है।

मुझे लगता है कि लगता है ...

string.ExtensionMethod(); 

से क्लीनर लग रहा है ...

StringHelper.ExtensionMethod("string to do something with"); 
+0

लेकिन जब आप उस व्यक्ति नहीं थे जिसने '' 'एक्सटेंशन मोड()' '' लिखा था, और आधिकारिक सी # दस्तावेज़ों में '' एक्सटेंशन 'विधि '' 'खोजने का प्रयास करने में कुछ समय व्यतीत किया, केवल यह समझने के लिए कि आप देख रहे थे गलत जगह। –

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