मेरे पास कोड का एक टुकड़ा निम्न जैसा है:एक विस्तार विधि बनाने के लिए सही कब है?
public class ActivityHelper
{
public void SetDate(IList<Activity> anActivityList)
{
foreach(Activity current in anActivityList)
{
current.Date = DateTime.Now;
}
}
//More methods, properties, fields, etc...
}
इसे आसानी से एक विस्तार विधि में परिवर्तित किया जा सकता है। उदाहरण के लिए:
public static void SetDate(this IList<Activity> aList)
{
foreach(Activity current in anActivityList)
{
current.Date = DateTime.Now;
}
}
मूल फ़ंक्शन किसी भी विशिष्ट विशिष्ट डेटा या गतिविधिहेल्पर क्लास से विधियों का उपयोग नहीं करता है जो ऐसा लगता है कि यह गलत जगह पर है। क्या यह विस्तार विधि लिखने का सही समय है? एक्सटेंशन विधियों को बनाने के लिए सही परिदृश्य क्या हैं?
ऐसा लगता है कि आप गलत सवाल पूछ रहे हैं। चाहे आप इसे एक विस्तार विधि बनाते हों या नहीं, काफी हद तक महत्वहीन नहीं है। लेकिन आपको लगभग निश्चित रूप से इसे ** स्थिर ** विधि बनाना चाहिए। कोई भी उदाहरण सदस्यों का उपयोग करने के बावजूद आपकी पहली विधि गैर स्थैतिक है; यह एक (मामूली) डिजाइन अशुद्ध-पैस है। – Timwi
@ तिमवी हां, मैं बहुत अच्छी तरह से उस विधि को स्थिर बना सकता हूं और इस उदाहरण में मैंने ऐसा क्यों नहीं किया है इसका कोई विशिष्ट कारण नहीं है। किसी भी मामले में मुझे अभी भी लगता है कि यह एक अजीब विधि है। – brainimus
मुझे लगता है कि जब लक्ष्य असेंबली या कक्षा "अपडेट के लिए बंद" होती है तो एक्सटेंशन विधियों का सबसे अच्छा उपयोग किया जाता है। मैं एकल उत्तरदायित्व सिद्धांत (एसआरपी) के आसपास लोगों को गलत तरीके से विस्तार विधियों को भी ढूंढता हूं। मेरी राय में, स्टेटिक क्लासेस और एक्सटेंशन विधियां सबसे गलत उपयोग की जाने वाली क्षमताओं हैं। –