2012-02-23 7 views
37

में स्टेटिक कीवर्ड मैं वास्तव में सी # में स्थिर कीवर्ड के वास्तविक अर्थ से उलझन में हूं। मैं इंटरनेट पर विभिन्न लेखों से गुजर चुका हूं लेकिन उनमें से कोई भी वास्तव में इसे समझने में मेरी सहायता नहीं कर रहा है और अन्य स्रोत विश्वसनीय नहीं हैं। मुझे पता है कि स्टैक ओवरफ्लो में कुछ शानदार दिमाग हैं जोसी #

  • जैसे प्रारंभिक होने के वास्तविक अर्थ को समझने में मेरी मदद कर सकते हैं।
  • स्थिर विधियों, गुण, वर्गों और कंस्ट्रक्टर
  • केवल पढ़ने के लिए बनाम लगातार
+6

http://www.codeproject.com/Articles/15269/Static-Keyword-Demystified – ken2k

+3

यह एक होमवर्क सवाल है:

e.g const PersonClass a=new PersonClass("name"); // error 

जवाब एक केवल पढ़ने के लिए क्षेत्र है? –

+5

क्या आपने ['static'] (http://msdn.microsoft.com/en-us/library/98f28cdx.aspx) पर एमएसडीएन दस्तावेज पढ़ा था? आप क्या समझते नहीं हैं? – Oded

उत्तर

68

संक्षेप में बनाम स्टेटिक, स्थिर प्रभावी रूप से "एक प्रकार के बजाय प्रकार के किसी भी एक उदाहरण के साथ जुड़े" का मतलब है। तो एक एक प्रकार के लिए स्थैतिक चर सेट (ऐपडोमेन के भीतर) है कि आपके पास 0 उदाहरण या दस लाख हैं; आप एक स्थिर सदस्य, आदि का उपयोग करने की एक उदाहरण की जरूरत नहीं है

सटीक स्थैतिक चर का प्रारंभ की बात वहाँ भी एक स्थिर निर्माता या नहीं है इस पर निर्भर करता है, लेकिन बहुत मोटे तौर पर यह "एक बार, आम तौर पर पहले है बोल कक्षा में कुछ भी महत्वपूर्ण होता है "। (एक अधिक विस्तृत विवरण के लिए this blog post देखें।)

readonly क्षेत्रों हो सकता है या तो स्थिर है या उदाहरण (यानी प्रकार से संबंधित या प्रकार का एक उदाहरण से संबंधित), const मूल्यों हमेशा परोक्ष स्थिर (वे 'कर रहे हैं संकलन-समय स्थिरांक फिर से करें, इसलिए प्रति उदाहरण एक प्रतिलिपि रखना समझ में नहीं आता है)।

आप कभी-कभी static देख सकते हैं के रूप में "एक प्रकार की सभी आवृत्तियों के बीच साझा" वर्णित किया जा रहा - मैं व्यक्तिगत रूप से नापसंद कि वर्णन, यह पता चलता है के रूप में कम से कम एक उदाहरण होने के लिए ... जबकि वास्तव में, यदि आपके पास है एक स्थिर सदस्य का उपयोग करने के लिए किसी भी उदाहरणों की आवश्यकता नहीं है। उदाहरणों के बीच "साझा" होने के बजाय, मैं उन्हें पूरी तरह से अलग मानना ​​पसंद करता हूं।

+6

पर वास्तव में एक अच्छा लेख दिखता है कितना साफ और विस्तृत :) मेरा अपवोट! –

+0

धन्यवाद :) इससे मुझे "स्थैतिक" – Karthik

+0

को समझने में मदद मिली इस पोस्ट के अनुसार http://stackoverflow.com/a/665696/1668069 एपडोमेन शेयर ढेर, यह सच है कि स्थिर वर्ग हमेशा है ढेर में 1 उदाहरण है कि वे एपडोमेन में साझा करते हैं, क्या यह सच है? – Mathematics

11

मैं इस लेख की सिफारिश कर सकते, यह बहुत वर्णनात्मक लगता है: Static Keyword Demystified

मैं भी एक अधिकारी सी # प्रोग्रामिंग गाइड लेख जो स्थिर कीवर्ड के विभिन्न उपयोगों को शामिल किया गया की सिफारिश करेंगे। तुम वहाँ से जा सकते हैं के बाद से वहाँ विभिन्न MSDN लेख .: Static Classes and Static Class Members (C# Programming Guide)

+0

@ जन Kratochvil अच्छा संदर्भ! – SIslam

6

प्रलेखन से करने के लिए लिंक का एक बहुत कुछ कर रहे हैं: एक वर्ग के

स्थिर क्षेत्र चर initializers कार्य की एक अनुक्रम कि क्रियान्वित कर रहे हैं के अनुरूप में शाब्दिक जिस क्रम में वे वर्ग घोषणा

स्टेटिक सदस्यों वर्ग के लिए सबसे पहले पहुंच पर intializeed कर रहे हैं और शाब्दिक क्रम में क्रियान्वित कर रहे हैं में प्रदर्शित में।

Static विधियों, गुण वर्ग के कुछ भाग हैं और उदाहरण नहीं।

Staticreadonly या constant के साथ कुछ लेना देना नहीं है।Static सदस्य एसेस्ड, readonly और constant जैसा सदस्य संग्रहीत/प्रबंधित जैसा तरीका है।

8

निरंतर (स्थिरांक) के बारे में एक छोटी सी और केवल पढ़ने के लिए:

  • निरंतर या स्थिरांक चर जो बदला नहीं जा सकता है, और जो मूल्य संकलन समय पर जाना जाता है।
  • केवल पढ़ने के लिए बहुत समान है, इसे संशोधित नहीं किया जा सकता है, अंतर यह है कि एक पाठक क्षेत्र को कन्स्ट्रक्टर में एक बार संशोधित/प्रारंभ किया जा सकता है। उसके बाद पढ़ने के लिए स्थिर के समान ही है।

का उपयोग उदाहरण:

constant: 
const int a=10; // value cannot be modified, value is known at compile time 

लेकिन जब हम निरंतर क्षेत्र चाहते हैं कौन मूल्य संकलन समय पर नहीं जाना जाता है क्या करना है?

readonly: 
readonly PersonClass a=new PersonClass("name"); // all correct