2010-02-15 14 views
41

मुझे एक साक्षात्कार में उपर्युक्त प्रश्न पूछा गया था। क्या आप मतभेदों को समझा सकते हैं? (प्रदर्शन - स्मृति - उपयोग - जब उपयोग करने के लिए जो?),गैर-स्टेटिक कक्षा बनाम स्टेटिक क्लास बनाम स्टेटिक विधि (सी #)

धन्यवाद

एर्कान

उत्तर

40

एक स्थिर वर्ग दस्तावेजों की घोषणा उस वर्ग के लिए अपने इरादे स्थिर कार्यक्षमता का एक संग्रह है, और उदाहरण के सदस्यों को जोड़ने किसी को भी एक संकलन त्रुटि मिल जाएगा।

स्थैतिक सदस्यों के साथ एक गैर स्थैतिक वर्ग आमतौर पर इंगित करता है कि कक्षा को किसी बिंदु पर तत्काल स्थापित करने के लिए डिज़ाइन किया गया है। इन कक्षाओं के स्टेटिक तरीके आमतौर पर दो चीजों में से एक करते हैं:

  1. उस प्रकार का उदाहरण बनाने के लिए एक कारखाना विधि प्रदान करें;
  2. सहायक कार्यक्षमता प्रदान करें जिसमें प्रकार के उदाहरण की आवश्यकता नहीं है;

इसके अलावा, जैसा कि पहले से ही बताया गया है, विस्तार विधियों को केवल स्थिर वर्ग पर ही घोषित किया जा सकता है।

18

मुझे लगता है आप अंतर के लिए कहा गया था?

एक स्थिर वर्ग पर एक स्थिर विधि का उपयोग एक विस्तार विधि को परिभाषित करने के लिए किया जा सकता है। एक गैर स्थैतिक वर्ग पर एक स्थिर विधि नहीं कर सकते हैं।

+0

यह एक व्यापक उत्तर है जो केवल सी # के लिए प्रासंगिक है। –

+7

@ नाथन सवाल विशेष रूप से सी # का उल्लेख करता है – JaredPar

15

प्रदर्शन और स्मृति उपयोग के संदर्भ में; ठीक कुछ भी नहीं। एक स्थैतिक वर्ग होने का मतलब है कि आप जानते हैं कोई उदाहरण नहीं है, लेकिन 1.1 में वापस निजी कन्स्ट्रक्टर पर्याप्त है। एक स्थिर वर्ग का प्रयोग करें यदि यह किसी उदाहरण के लिए कोई समझ नहीं आता है! (उपयोगिता कक्षाएं आदि)

5

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

जब आप उपयोगिता विधियों को प्रदान करना चाहते हैं जो आपके उदाहरण से निपटते हैं, तो मैं आपको गैर-स्थैतिक वर्ग में स्थिर विधियों का उपयोग करने की सलाह देता हूं। उदाहरण के लिए:

var myClass = MyClass.Create(); 
var myClass = MyClass.Parse("serialized.MyClass"); 
-1

सभी स्थिर तरीकों के साथ सामान्य कक्षा के साथ जाने या किसी स्थिर वर्ग का उपयोग करने का निर्णय लेने के दौरान मुझे सामना करना पड़ा एक सामान्य अंतर यह है कि एक सामान्य वर्ग अंतरफलक कार्यान्वयन का समर्थन करता है, जहां स्थिर वर्ग नहीं है। मैं केवल स्थिर वर्ग का उपयोग करता हूं जब मुझे यकीन है कि यह स्थिर कार्यों (आमतौर पर सहायक कार्यों) का संग्रह होगा, और कार्यक्रम की मुख्य धारा में कभी नहीं होगा। मैं निर्भरता इंजेक्शन, यूनिट परीक्षण इत्यादि के लिए इंटरफ़ेस प्रोग्रामिंग को बढ़ावा देता हूं। इसलिए, कार्यक्रम के मुख्य प्रवाह के लिए, मैं सामान्य विधियों को स्थिर विधियों के साथ उपयोग करता हूं।

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