मैं आपके द्वारा प्रदान किए गए कोड नमूने से जुड़े अपने विशिष्ट प्रश्न का उत्तर देने का प्रयास करूंगा।
यदि SomeMethod
केवल उस वर्ग में उपयोगी है जिसे घोषित किया गया है, तो मैं स्थिर रूपांतरण से बचूंगा और इसे एक उदाहरण विधि के रूप में छोड़ दूंगा।
यदि SomeMethod
कक्षा के बाहर उपयोगी है, तो इसे कक्षा से बाहर कारक बनाएं। यह किसी स्थिर उपयोगिता वर्ग में कहीं भी एक स्थिर विधि के रूप में हो सकता है। इसे टेस्ट करने योग्य बनाने के लिए, सुनिश्चित करें कि इसकी सभी निर्भरताओं को तर्क के रूप में इसमें पारित किया गया है। यदि इसमें निर्भरताएं हैं, तो हो सकता है कि आप डिज़ाइन की समीक्षा कर सकें और यह पता लगाना चाहें कि यह क्या करना है - यह आपके द्वारा गुजरने वाले वर्गों में से एक में एक उदाहरण विधि के रूप में बेहतर हो सकता है।
कुछ लोग कहते हैं कि स्थैतिक बुरा है। यह आम तौर पर परिवर्तनीय स्थिर स्थिति प्रदान करता है, जहां बिंदु से चारों ओर घूमते हैं, एक स्थिर कन्स्ट्रक्टर को ऐप डोमेन के आंसू में बुलाया जाता है, जो बीच में बदलता है। उस राज्य पर निर्भर कोड अप्रत्याशित रूप से व्यवहार कर सकता है और परीक्षण भयानक हो सकता है। हालांकि, एक स्थिर विधि के साथ बिल्कुल कुछ भी गलत नहीं है जो म्यूटेबल स्थिर स्थिति का संदर्भ नहीं देता है।
एक (बहुत सरल) उदाहरण है, जहां एक स्थिर बुराई है, लेकिन एक गैर बुराई संस्करण के लिए परिवर्तित किया जा सकता के लिए, एक समारोह है कि किसी की उम्र की गणना करता है की कल्पना:
static TimeSpan CalcAge(DateTime dob) { return DateTime.Now - dob; }
कि परीक्षण योग्य है? जवाब न है। यह बड़े पैमाने पर अस्थिर स्थिर स्थिति पर निर्भर करता है जो DateTime.Now
है। आपको हर बार एक ही इनपुट के लिए एक ही आउटपुट की गारंटी नहीं है। इसे और अधिक परीक्षण के अनुकूल बनाने के लिए:
static TimeSpan CalcAge(DateTime dob, DateTime now) { return now - dob; }
अब सभी मूल्यों समारोह पर निर्भर करता है में पारित कर रहे हैं, और यह पूरी तरह से परीक्षण योग्य है। एक ही इनपुट आपको एक ही आउटपुट प्राप्त करेगा।
स्रोत
2010-09-13 11:46:51
[स्टेटिक बनाम गैर स्थैतिक विधि] के संभावित डुप्लिकेट (http://stackoverflow.com/questions/1184701/static-vs-non-static-method) –
यदि विधि को आवृत्ति विशिष्ट डेटा की आवश्यकता नहीं है इसे स्थिर बना सकते हैं। – halfdan
मुझे आधादान पता है, लेकिन मैं पूछ रहा हूं - क्या मुझे चाहिए? – Nobody