2010-02-11 5 views
21

सी # में, कक्षा स्थिर को चिह्नित करने का उद्देश्य क्या है?सी # में, कक्षा स्थिर को चिह्नित करने का उद्देश्य क्या है?

यदि मेरे पास ऐसी कक्षा है जिसमें केवल स्थिर विधियां हैं, तो मैं कक्षा को स्थिर या नहीं चिह्नित कर सकता हूं। मैं कक्षा को स्थिर क्यों चिह्नित करना चाहूंगा? यदि मैं सभी विधियों को स्थैतिक मानता हूं, और यदि मैं कभी भी एक गैर स्थैतिक विधि नहीं जोड़ना चाहता हूं, तो क्या मैं कभी भी कक्षा स्थिर नहीं करना चाहूंगा?

मैंने चारों ओर देखा और कुछ समान प्रश्न देखे, लेकिन ऐसा कोई नहीं था।

+0

http://stackoverflow.com/questions/576853/what-is-the-use-of-a-static-class http://stackoverflow.com/questions/241339/when-to-use-static- कक्षा-इन-सी –

+0

अपना खुद का प्रश्न पूछें, @ डबर्मन! – Cheeso

+0

चिंता न करें, आपके प्रश्न को प्रदूषित नहीं करना चाहते हैं। सोचा कि कोई स्थिर सदस्यों की थ्रेड-सुरक्षा पर टिप्पणी कर सकता है। ;) – IAbstract

उत्तर

26

एक वर्ग को स्थिर के रूप में चिह्नित करना एक घोषणात्मक बयान है कि आप केवल इस प्रकार के लिए स्थैतिक और स्थिर सदस्य हैं। यह संकलक द्वारा लागू किया जाता है और आपको गलती से प्रकार के लिए एक विधि विधि जोड़ने से रोकता है।

अन्य लाभों में

  • एक्सटेंशन तरीकों केवल स्थिर कक्षाओं में परिभाषित किया जा सकता
  • वर्ग
  • एक सामान्य तर्क के रूप में प्रकार का उपयोग रोकता का उदाहरण बनाकर उपयोगकर्ताओं पर रोक (धन्यवाद एरिक!)
+8

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

+0

@ जोएल, इस – JaredPar

+6

के साथ धन्यवाद, संयोग से, कक्षा स्थैतिक बनाने से सामान्य प्रकार, संरचना, इंटरफ़ेस, प्रतिनिधि या विधि पर सामान्य प्रकार के तर्क के रूप में प्रकार का उपयोग भी रोकता है। (आप सामान्य प्रकार के तर्क के रूप में इस प्रकार के साथ क्या करेंगे? आप इसे नहीं बना सकते हैं, इसलिए उस प्रकार का कोई भी चर कभी भी शून्य नहीं होगा। आप एक प्रकार पैरामीटर के माध्यम से स्थैतिक तरीकों को कॉल नहीं कर सकते हैं। यह होगा पूरी तरह बेकार है, इसलिए हम इसे अनुमति नहीं देते हैं।) –

6

यदि आप विस्तार विधियां लिखना चाहते हैं, तो आपको एक स्थिर वर्ग का उपयोग करना होगा। अन्यथा यह दिखाने के लिए कि कक्षा में कभी भी कोई उदाहरण डेटा नहीं होगा।

1

यदि आप इसे केवल स्थैतिक तरीकों, एक विशिष्ट सहायक वर्ग रखने के लिए मजबूर करना चाहते हैं तो आप एक वर्ग स्थिर चिह्नित करते हैं। यदि आप एक उदाहरण विधि डालते हैं तो संकलक शिकायत करेगा - यह अच्छा है। .NET ढांचे के संस्करण 1 में एक वर्ग था, याद रखें कि कौन सा, केवल स्थिर विधियों के साथ जहाज के लिए था। आकस्मिक रूप से उन तरीकों में से एक को स्थिर संशोधक नहीं मिला। क्योंकि शिपिंग के बाद बग को बहुत देर से देखा गया था, इस सुविधा में मौजूद नहीं था। उन्होंने कन्स्ट्रक्टर को निजी बना दिया और इस तरह की विधि का उपयोग नहीं किया जा सका।

5

यह सी # भाषा के लिए विशिष्ट एक सम्मेलन है, सीएलआर में स्थैतिक वर्गों की कोई धारणा नहीं है। यह सुनिश्चित करता है कि आप कक्षा में एक उदाहरण सदस्य को गलती से जोड़ नहीं सकते हैं, कक्षा का उत्तराधिकारी नहीं हो सकता है और क्लाइंट कोड गलती से कक्षा का उदाहरण नहीं बना सकता है। कक्षा के लिए अंतर्निहित टाइप एट्रिब्यूट सार और मुहरबंद हैं। सार सुनिश्चित करता है कि नया ऑपरेटर काम नहीं कर सकता है, मुहरबंद सुनिश्चित करता है कि आप कक्षा से उत्तराधिकारी नहीं हो सकते हैं।

सम्मेलन के अनुसार, विस्तार विधियां एक स्थिर वर्ग के स्थिर सदस्य होने चाहिए। वीबी.नेट इसे अलग करता है, इसके लिए [एक्सटेंशन] विशेषता की आवश्यकता होती है।

आपके कोड में स्थैतिक कक्षाओं का उपयोग करना आवश्यक नहीं है, लेकिन यह उपयोगी है। उनका अनुबंध बहुत वर्णनात्मक है, यह आपके कोड को समझने में आसान बनाता है। लेकिन ओओपी कोड की बजाय प्रक्रियात्मक कोड लिखने के लिए वाहन के रूप में उनका उपयोग न करने के लिए सावधान रहें।

+0

+1 और प्रक्रियात्मक कोड लिखने के लिए अत्यधिक उपयोग का उल्लेख। – si618

7

static के रूप में कक्षा को चिह्नित करने से आपको दो महत्वपूर्ण चीजें मिलती हैं।

  • कंपाइलर सत्यापन कि आपने केवल कक्षा में static सदस्यों को रखा है।

  • आपके कोड के पाठकों को यह एक स्पष्ट बयान है कि यह कक्षा केवल static सदस्यों के लिए एक कंटेनर है।

सुविधा NDP v1.0 में एक बग है, जहां a un-callable non-static member was included in the System.Environment class के जवाब में आविष्कार किया गया था।

+0

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

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