मुझे सी # में एक पाठ पार्सर पर काम करते समय अक्सर एक स्ट्रिंग की पहली पंक्ति को हटाने के लिए मिला। मैंने इसे मेरे लिए करने के लिए एक सरल कार्य रखा है, लेकिन एक PHP पृष्ठभूमि से आ रहा है, मुझे नहीं पता कि इसे कहां रखा जाए क्योंकि मैं कक्षा के बाहर एक समारोह को परिभाषित नहीं कर सकता। .NET में ऐसा करने का एक पारंपरिक तरीका क्या है? क्या मैं अपने फ़ंक्शन को स्टोर करने के लिए एक स्थिर वर्ग बना सकता हूं?मुझे .NET प्रोजेक्ट में विविध कार्यों को कहां रखा जाना चाहिए?
उत्तर
हाँ, स्थिर सहायक वर्गों आमतौर पर जिस तरह से यह करने के लिए कर रहे हैं।
इसके अलावा, # 3 सी में आप इस तरह प्रणाली की घोषणा कर सकते हैं:
public static string RemoveFirstLine(this string s) {
...
}
यह एक विस्तार विधि बनाने के लिए। फिर आप इसे किसी भी स्ट्रिंग पर कॉल कर सकते हैं जैसे कि स्ट्रिंग प्रकार पर विधि घोषित की गई थी।
तितली का वर्णन करने के लिए, विस्तार विधियां निश्चित रूप से जाने का तरीका हैं। – Bomlin
वाह, विस्तार विधियां साफ हैं! मैं यही उपयोग कर समाप्त हुआ। उनका उल्लेख करने के लिए धन्यवाद। –
मैं आम तौर पर एक सहायक या उपयोगिता स्थैतिक वर्ग बना देता हूं और फिर वहां सहायक सहायक कार्य करता हूं।
इसके अतिरिक्त, मैं हेल्पर और उपयोगिता वर्गों को तार्किक रूप से समूहीकृत रखने की कोशिश करता हूं - ऑब्जेक्ट रूपांतरण कार्यों के साथ टेक्स्ट पार्सिंग फ़ंक्शंस को गैरकानूनी बनाना है। भ्रम को एक टेक्स्टयूट्स क्लास और एक रूपांतरण यूटिल क्लास के साथ साफ़ कर दिया गया है।
+1 ने मुझे इसे हरा दिया। –
आपको शायद ऐसे फ़ंक्शंस एक्सटेंशन विधियों को बनाने से भी फायदा होगा। –
आमतौर पर मैं उपयोगिता वर्ग बनाता हूं और स्थिर सहायक विधियों को परिभाषित करता हूं।
मुझे नहीं लगता कि इसके लिए एक मानक है। मैं BlahUtil नामक एक स्थिर वर्ग बनाने के लिए जाते हैं। आपके उदाहरण के लिए, मैं इसे StringUtil
पर एक स्थिर विधि बना दूंगा। इससे मुझे समझदार इकाइयों में समूह से संबंधित तरीकों में मदद मिलती है, जिससे उन्हें खोजना आसान हो जाता है और उन्हें टीमों में साझा किया जा सकता है।
तुम भी तो चुन सकते हैं जो इन तरीकों में से विस्तार तरीकों (# 3.0 ग के बाद से) के रूप में संपर्क में हैं:
public static class StringUtil
{
public static string RemoveFirstLine(this string multiLineString)
{
// ...
}
}
मैं ऐसे कार्यों के लिए एक स्थिर कार्यकर्ता वर्ग बनाउंगा। शायद नहीं सबसे अच्छा तरीका है, लेकिन एक जो चीजों को सरल ... रहता है;)
कश्मीर
उपयोग एक स्ट्रिंग के लिए एक extension method। यही वह है जो वे हैं।
डैन ने जोड़ा जब मैं अपना जवाब लिख रहा था !! –
मैंने स्थिर "सहायक" कक्षाएं की हैं लेकिन कुछ विश्लेषण के बाद; इस प्रकार का सहायक कार्य हमेशा एक विशिष्ट वर्ग कार्यान्वयन के रूप में समाप्त होता है। आपके मामले में आपके पास "मूल पाठ पार्सर" वर्ग और एक व्युत्पन्न कक्षा होगी जो "पार्स" विधि को ओवरराइड करती है।
आप स्थिर विधियों वाले वर्ग का उपयोग कर सकते हैं। कुछ ParserUtils.RemoveFirstLine() की तरह। .NET 3.5 और उसके बाद आप कभी-कभी विस्तार विधियों का उपयोग कर सकते हैं जब आपके उपयोगिता फ़ंक्शन उस कक्षा से संबंधित होते हैं जिसे आप संशोधित नहीं कर सकते, जैसे स्ट्रिंग क्लास। Intellisense परियोजना में किसी भी स्ट्रिंग ऑब्जेक्ट पर विस्तार विधि दिखाएगा।
सावधान रहें!
क्रॉस काटने वाले सामान्य उपयोगिता कार्यों को उच्च उपयोगिता नामस्थान में रहना चाहिए। स्ट्रिंग पार्सिंग, फाइल मैनिपुलेशन, आदि
एक्सटेंशन ऑब्जेक्ट्स को अपने नामस्थान में रहना चाहिए।
उपयोगिता कार्य जो व्यावसायिक वस्तुओं या विधियों के निर्दिष्ट सेट पर लागू होते हैं, उन वस्तुओं के नामस्थान के भीतर रहना चाहिए। अक्सर एक सहायक प्रत्यय, यानी BusinessObjectHelper के साथ। नामकरण यहां महत्वपूर्ण है। क्या आप विविध तरीकों के लिए एक कंटेनर बना रहे हैं, या क्या उन्हें विशेष वस्तुओं, यानी एक पार्सर में समूहित करने के लिए और अधिक समझदारी होगी?
यदि आप सी # 3.0 का उपयोग कर रहे हैं, तो आप एक विस्तार विधि का उपयोग करने पर विचार करना चाहेंगे!
public static class StringExtensions
{
public static string RemoveFirstLine(this string myString)
{
return myString.Remove("line..!");
}
}
तब कोड में आप यह कर सकते हैं:
string myString = "Hello World etc";
string removedLineString = myString.RemoveFirstLine();
मैं आमतौर पर विस्तार विधियों से नफरत करता हूं। उन्होंने कार्यक्षमता के वर्ग और पुस्तकालय encapsulation तोड़ दिया। मैं .NET लाइब्रेरी को "ठीक" करने के लिए कौन हूं? अब कोई मेरे कोड myString.Whargarble() में कुछ विधि में चलाता है। वे उस विधि को कहां पाते हैं? मुझे लगता है कि myString = MyCompany.StringUtils.Whargarble (myString) क्या हो रहा है इसका एक और स्पष्ट बयान है। –
एक उचित बिंदु है, यह आपके ऊपर है कि आपके कोड को कैसे कार्यान्वित करें :)। मुझे यकीन नहीं है कि एक एक्सटेंशन को एक फिक्स के रूप में माना जाता है, यह इसके विस्तार के लिए अधिक है! वे इसे क्लिक करके और F12 का चयन करके पाते हैं, और इंटेलिजेंस में छोटे आइकन द्वारा इसकी एक विस्तार विधि की पहचान करते हैं। यदि आप उन्हें एक्सटेंशन नामस्थान में जोड़ते हैं तो इसकी संभावना नहीं है; फिर आप इसका उपयोग करने के लिए "ऑप्ट-इन" की व्याख्या करते हैं। मुझे व्यक्तिगत रूप से इसके साथ कोई समस्या नहीं है। यह कैसे "कार्यक्षमता के encapsulation तोड़ने" होगा ?? यह एक विस्तार वर्ग के भीतर encapsulated! –
एक्सटेंशन उन लोगों के समक्ष जाने का रास्ता है। यह सचमुच आपके कार्य को अवसर पर जोड़ता है। केवल एक चीज यह है कि 2008 में स्थिर विधि करना संभव नहीं है।
- 1. "वैश्विक" सिम्फनी कार्यों को कहां रखा जाना चाहिए?
- 2. जावास्क्रिप्ट कहां रखा जाना चाहिए?
- 3. रेलवे ऐप में वार्डन कॉलबैक कहां रखा जाना चाहिए?
- 4. रूपांतरण कार्यों को कहां रखा जाए?
- 5. क्लास इंटरफेस को .NET क्लास लाइब्रेरी में कहां रखा जाना चाहिए?
- 6. मुझे अपनी कस्टम विजेट फ़ाइलों को वाईआई ढांचे में कहां रखा जाना चाहिए?
- 7. Django: सहायक कार्यों को कहां रखा जाए?
- 8. beans.xml कहाँ रखा जाना चाहिए?
- 9. गैर-सदस्य ऑपरेटर अधिभार कहां रखा जाना चाहिए?
- 10. मुझे अपनी लॉग फ़ाइल को एएसपीनेट एप्लिकेशन के लिए कहां रखा जाना चाहिए?
- 11. मुझे अपने डी कंटेनर के संदर्भ को कहां रखा जाना चाहिए?
- 12. अपवादों को एक अलग पैकेज में रखा जाना चाहिए?
- 13. मुझे अधिसूचना पर्यवेक्षक को कहां हटाया जाना चाहिए?
- 14. वर्चुअलएन्व कहां बनाया जाना चाहिए?
- 15. 'CreateMap' कथन कहां जाना चाहिए?
- 16. क्या एफ # कार्यों को मॉड्यूल, कक्षाओं या किसी अन्य संरचना में रखा जाना चाहिए?
- 17. क्या .idea फ़ोल्डर को स्रोत नियंत्रण में रखा जाना चाहिए?
- 18. क्या विधानसभाInfo.cs को संस्करण नियंत्रण में रखा जाना चाहिए?
- 19. मैवेन प्रोजेक्ट के पथ में जहां मुझे कॉन्फ़िगरेशन फ़ाइलों को रखा जाना चाहिए जिन्हें संसाधन नहीं माना जाता है
- 20. आर्टिफिशियल इंटेलिजेंस प्रोजेक्ट - मुझे किस भाषा के लिए जाना चाहिए?
- 21. सीएमके में द्विआधारी कहां रखा जाए? मेरे प्रोजेक्ट में
- 22. उल्का में इकाई परीक्षण कहाँ रखा जाना चाहिए?
- 23. सत्यापन तर्क कहां लागू किया जाना चाहिए?
- 24. प्राथमिकताएं .xml फ़ाइल कहां जाना चाहिए?
- 25. क्लस्टर्ड इंडेक्स को किस कॉलम पर रखा जाना चाहिए?
- 26. असेंबली ट्रेडमार्क एट्रिब्यूट में क्या रखा जाना चाहिए?
- 27. क्या डोमेन या डोमेन में व्यापार तर्क रखा जाना चाहिए?
- 28. नेटबीन प्रोजेक्ट फ़ाइलों को स्रोत नियंत्रण में क्यों जाना चाहिए?
- 29. स्रोत नियंत्रण से क्या .net फ़ाइलों को बाहर रखा जाना चाहिए?
- 30. हमारे समाधान में इकाई ढांचे को कहां रखा जाए?
किस तरह की .NET परियोजना? ASP.NET? एएसपी.नेट एमवीसी? WinForms? सिल्वरलाइट? परियोजना के प्रकार के आधार पर "इसे कहां रखा जाए" के लिए सम्मेलन अलग-अलग हैं। – Portman
वह WinForms होगा। –