दिलचस्प पोस्ट
64-बिट में एक संयुक्त गुणा और डिवाइड ऑपरेशन करने का सबसे सटीक तरीका है? mysql 5.0 अनुक्रमित – अद्वितीय बनाम गैर अद्वितीय विजुअल स्टूडियो: कॉन्टेक्सस्विचडडलॉक रेल 3.1 और रूबी 1.9.3p125: रूबी-डीबग19 अभी भी "प्रतीक नहीं मिला: _ruby_threadptr_data_type" के साथ क्रैश करता है कैसे सी में धागा से एक मान वापस करने के लिए इकाई फ़्रेमवर्क – गुणों के कई स्तर शामिल करें आईओएस में ऐप डेलीगेट से वर्तमान दृश्य नियंत्रक में कॉलिंग विधि SQLite में धुरी कैसे iPhone 5 के लिए अलग स्टोरीबोर्ड पर स्विच करने के लिए? रिमोट GitHub का ग्रे आइकन क्या मतलब है JQuery के AJAX का उपयोग करके PHP फ़ंक्शन कॉल करें मैं .NET में स्ट्रिंग के * पहले उदाहरण * की जगह कैसे करूं? Log4j xml कॉन्फ़िगरेशन में सिस्टम पर्यावरण चर का उपयोग करना एनजी-दोहराने वाला फिल्टर डुप्लिकेट परिणाम बनाने के लिए कैसे करें इंस्टेंस सदस्य को टाइप पर इस्तेमाल नहीं किया जा सकता

स्थिर वर्ग के सदस्यों को स्थिर क्यों घोषित करना चाहिए? ऐसा क्यों नहीं है?

जाहिर है, एक स्थिर वर्ग पर एक उदाहरण सदस्य नहीं हो सकता, क्योंकि उस वर्ग को कभी भी प्रारंभ नहीं किया जा सकता था। हमें सदस्यों को स्थिर के रूप में घोषित करने की आवश्यकता क्यों है?

Solutions Collecting From Web of "स्थिर वर्ग के सदस्यों को स्थिर क्यों घोषित करना चाहिए? ऐसा क्यों नहीं है?"

मैं हर समय इस तरह से प्रश्न पूछता हूं मूलतः सवाल "जब एक घोषित सदस्य के बारे में एक तथ्य संकलक द्वारा अनुमानित किया जा सकता है, तो उस तथ्य की स्पष्ट घोषणा (1) की आवश्यकता है, (2) वैकल्पिक, या (3) मना होना चाहिए?"

कोई भी आसान जवाब नहीं है हर किसी को केस-बाय-केस आधार पर लेना होगा। एक स्थैतिक वर्ग के सदस्य पर "स्थैतिक" डाल देना आवश्यक है। एक छुपा पर "नया" डालकर, व्युत्पन्न वर्ग की गैर-अधोमुखी विधि वैकल्पिक है। एक const पर "स्थिर" डाल देना मना किया है।

संक्षेप में अपने परिदृश्य पर विचार करते हुए, यह अजीब लगता है कि इसे मना कर दिया। आपके पास एक पूरी कक्षा है जिसे "स्थिर" चिह्नित किया गया है आप क्लास को स्थिर बनाने का फैसला करते हैं और इसका मतलब है कि आपको सभी स्थिर संशोधकों को निकालना होगा? वह अजीब है।

यह वैकल्पिक बनाने के लिए विचित्र लगता है; मान लें कि आपके पास एक स्थैतिक वर्ग और दो विधियाँ हैं, एक स्थिर स्थैतिक, एक नहीं चूंकि स्थिर सामान्य रूप से डिफ़ॉल्ट नहीं होता है, इसलिए यह सोचना स्वाभाविक लगता है कि उनके बीच अंतर होना है। यह वैकल्पिक रूप से संभवतः भ्रमित होने लगता है।

यह आवश्यक बनाता है, क्योंकि तीन विकल्पों में से कम से कम खराब है।

इस प्रकार की समस्याओं पर अधिक विचार के लिए http://blogs.msdn.com/b/ericlipper/archive/2010/06/10/don-t-repeat-yourself-consts-are-already-static.aspx देखें।

क्योंकि परिभाषा के अनुसार, उनके सभी सदस्यों को स्थिर होना चाहिए उन्होंने कुछ भ्रामक वाक्यविन्यास चीनी नहीं देने का फैसला किया

यह निहित हो सकता है, लेकिन यह भी कोड पढ़ना मुश्किल होगा और भ्रम की स्थिति पैदा करेगा।

रिचर्ड,

हम्मम … मुझे लगता था कि भाषा के डिजाइनरों ने फैसला किया था कि किसी भी संभावित भ्रम को रोकने के लिए यह बहुत स्पष्ट होगा … जब एक रखरखाव, जो कोड नहीं जानता है , एक के बीच में कूदता है स्थिर वर्ग, और मानता है कि वे एक "सामान्य" उदाहरण संदर्भ में हैं

लेकिन जाहिर है, यह सिर्फ एक अनुमान है। अधिकतर IDE आपको वैसे भी वहां मदद करते हैं, "स्वचालित समय पर" स्थिर संशोधक जोड़कर … या कम से कम "लेखन समय" पर अपनी गलती को उजागर करते हुए, "समय संकलन" करने के लिए लगाए गए हैं।

यह एक अच्छा सवाल है … दुर्भाग्यवश एक "सही" उत्तर के साथ नहीं … जब तक कोई सी # -भाषी-डिज़ाइनर ब्लॉग (या समान) से इस लिंक पर चर्चा नहीं कर सकता है। मैं आपको जो बता सकता हूं वह है: "मुझे 1,000 डॉलर की शर्त थी कि यह कोई दुर्घटना नहीं है।"

चीयर्स। कीथ।

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

मेरे पास मॉड्यूल हैं, जैसे कि VB.NET और F # में और फिर, स्थैतिक सुधारक भ्रम से बचने के लिए आवश्यक नहीं होगा।

स्पष्ट कोडन चीज़ों को बनाए रखने योग्य बनाती है

यदि मैं एक विधि से एक वर्ग में दूसरे को कॉपी करना चाहता हूं, तो कोड बेहतर संगठित होता है, तो मुझे हर समय कई चीकिंग करना पड़ता है, सिर्फ इसलिए कि गंतव्य वर्ग स्थिर है या स्थिर नहीं है।

सदस्य को स्थैतिक के रूप में घोषित करके, आपके पास यह भी देखा जा सकता है कि कोड क्या है, जब आप इसे देखेंगे।

यह भी कम भ्रमित है एक कक्षा की कल्पना करें जो स्थिर है, और इसके अंदर सदस्यों को स्थिर के रूप में चिह्नित किया गया है, और अन्य चिह्नित नहीं हैं

मैं बहुत सारे कारण देख सकता हूं, और कई अन्य कारण मौजूद हैं।

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

इसका कारण यह है कि कॉपी पेस्ट और अधिक जटिल होगा

यदि आप एक विधि को एक स्थिर वर्ग से गैर-स्थिर वर्ग तक कॉपी करते हैं तो आपको static कीवर्ड जोड़ना होगा।

यदि आप एक विधि को गैर-स्थिर वर्ग से एक स्थिर वर्ग में प्रतिलिपि बनाते हैं, तो आपको static कीवर्ड को निकालना होगा।

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