जैसा कि शीर्षक से पता चलता है कि मैं समझना चाहता हूं कि स्थिर वर्गों में केवल स्थिर सदस्य क्यों हो सकते हैं। मुझे उम्मीद है कि यह सभी प्रोग्रामिंग भाषाओं में समान है। तो मुझे विश्वास है कि सभी भाषाओं के लिए स्पष्टीकरण समान होगा।स्थिर वर्गों में केवल स्थिर सदस्य क्यों हो सकते हैं?
उत्तर
स्टेटिक कक्षाओं को तत्काल नहीं किया जा सकता है, इसलिए इसमें कोई उदाहरण नहीं होगा, गैर स्थैतिक सदस्यों को उनकी कक्षा का उपयोग करने के लिए एक उदाहरण की आवश्यकता होगी। चूंकि स्थैतिक वर्ग में कोई उदाहरण नहीं हो सकता है, इसलिए यदि कोई है तो आप गैर स्थैतिक सदस्यों तक नहीं पहुंच सकते हैं।
इसलिए स्थिर कक्षाओं केवल स्थिर सदस्यों
मुमकिन है क्योंकि उदाहरण के तरीकों कहा जाता है कभी नहीं किया जा सकता है हो सकता है।
यदि आप एक स्थैतिक वर्ग में एक गैर स्थैतिक सदस्य डालते हैं, तो यह एक स्थिर वर्ग नहीं होगा। (आप स्थैतिक वर्ग को तत्काल नहीं कर सकते - गैर स्थैतिक सदस्यों के लिए, आपको कक्षा के उदाहरण बनाने में सक्षम होना चाहिए, जिन पर इसे नियमित वर्ग बनाना होगा)
इसे देखने के लिए एक और तरीका, एक वर्ग को स्थैतिक के रूप में चिह्नित करके, आप जानबूझकर संकलक के लिए पूछ रहे हैं कि आप उस वर्ग में गैर स्थैतिक तरीकों को न रखने दें - यह एक डिज़ाइन निर्णय है जिसे आपने बनाया है, और संकलक यह जांचने में सहायता करता है कि आप अपना अनुसरण करते हैं डिज़ाइन।
एक स्थिर वर्ग को तत्काल नहीं किया जा सकता है। इसलिए, गैर स्थैतिक सदस्यों को कभी भी एक्सेस नहीं किया जा सका।
यदि आप स्थिर सदस्यों को मिश्रण और मिलान करना चाहते हैं, तो कक्षा को स्थिर न बनाएं।
यह एक डिज़ाइन निर्णय नहीं है, जितना तार्किक है। शुरू करने का सबसे आसान स्थान अवधारणाओं की प्रासंगिक परिभाषाओं को देखकर है:
एक स्थैतिक वर्ग वह है जिसे तत्काल नहीं किया जा सकता है। इसका मतलब है कि आप उस वर्ग के प्रकार की वस्तुओं को नहीं बना सकते हैं।
गैर स्थैतिक सदस्य कक्षा के विशिष्ट उदाहरण से बंधे होते हैं। उनमें डेटा शामिल है जो से संबंधित है उस वर्ग प्रकार के एक एकल ऑब्जेक्ट के साथ।
इसलिए, यदि एक स्थैतिक वर्ग में गैर स्थैतिक सदस्य होते हैं, तो आप कभी भी उस डेटा तक पहुंच नहीं सकते या उस विधि को कॉल नहीं कर सकते क्योंकि आप उस स्थिर वर्ग के प्रकार की किसी वस्तु को तुरंत चालू नहीं कर सकते। इसके बजाय, आपके पास सभी स्थिर सदस्य होना चाहिए जिन्हें सीधे कक्षा के स्थिर उदाहरण से बुलाया जा सके।
हालांकि, आप में स्थैतिक सदस्यों वाले गैर-स्थैतिक वर्ग हैं। इस तरह, आप डेटा तक पहुंच सकते हैं या उस वर्ग की ऑब्जेक्ट को तत्काल किए बिना स्थिर सदस्यों के रूप में प्रकट विधियों को कॉल कर सकते हैं। हालांकि, आप भी उस वर्ग के प्रकार की वस्तु को तुरंत चालू कर सकते हैं और गैर स्थैतिक (या उदाहरण) सदस्यों तक पहुंच सकते हैं। उदाहरण के लिए, यदि आपके पास कक्षा Circle
थी, तो आपके पास CalculateArea
फ़ंक्शन और PI
फ़ील्ड जैसे स्थिर सदस्य हो सकते हैं। ये सदस्य सभी मंडलियों पर लागू होते हैं, आम तौर पर, इस तथ्य के आधार पर कि वे मंडल हैं। लेकिन आपके पास गैर-स्थैतिक सदस्य भी हो सकते हैं जो उस वर्ग के विशिष्ट उदाहरण से जुड़े हुए हैं, क्योंकि वे विशिष्ट सर्कल ऑब्जेक्ट्स का वर्णन करते हैं। ये फ़ील्ड Diameter
और Circumference
हो सकते हैं।आपके पास गैर-स्थैतिक फ़ंक्शंस भी हो सकते हैं जो उस विशेष उदाहरण के लिए गैर स्थैतिक फ़ील्ड में संग्रहीत डेटा को देखते हुए सर्कल के क्षेत्र की गणना करते हैं।
मुझे यकीन नहीं है कि यह संबंधित है लेकिन (कम से कम # .net 4.0 में) एक स्थिर वर्ग में गैर स्थैतिक वर्ग परिभाषाएं हो सकती हैं जिनमें गैर स्थैतिक सदस्य होते हैं। तो ऐसा लगता है कि आप स्थैतिक वर्ग में गैर स्थैतिक सदस्यों को जोड़ सकते हैं क्योंकि एक नेस्टेड प्रकार को member माना जाता है।
उदाहरण:
public static class MyClass
{
/// <summary>
/// This non-static class is accessible and able to be instantiated through the
/// static class MyClass.
/// </summary>
public class Type1
{
public String prop1 { get; set; }
public String funct1(String result)
{
return result;
}
}
/// <summary>
/// This function is inaccessible since it requires an instance of MyClass.
/// It will also cause a compile error.
/// </summary>
/// <returns></returns>
public String nonStaticFunc()
{
return "aString";
}
/// <summary>
/// This function is accessible through the MyClass type because it is also static
/// and therefore does not require a class instance.
/// </summary>
/// <returns></returns>
public static String staticFunc(String str)
{
return str;
}
}
आप देख सकते हैं, स्थिर वर्ग MyClass एक गैर स्थैतिक कक्षा परिभाषा टाइप 1 इसी क्रम का उपयोग करने के instanced किया जाना चाहिए है। जबकि MyClass में स्थैतिक फ़ंक्शन staticFunc को किसी उदाहरण की आवश्यकता नहीं है।
//Valid operations
String result = MyClass.staticFunc("result"); //No class instance.
MyClass.Type1 someObj = new MyClass.Type1(); //Class instance from static class containing non-static nested type.
someObj.prop1 = someObj.funct1("hi");
- 1. स्थिर वर्गों में विनाशक क्यों नहीं हो सकते हैं?
- 2. हमारे पास स्थिर अंतिम सदस्य क्यों हो सकते हैं लेकिन आंतरिक कक्षा में स्थिर विधि नहीं हो सकती है?
- 3. एसएसआरएस विस्तार के सदस्यों में केवल स्थिर आंतरिक सदस्य हो सकते हैं।
- 4. स्थिर स्थिर सदस्य
- 5. स्थिर वर्गों में गैर स्थैतिक तरीकों और चर क्यों नहीं हो सकते हैं?
- 6. क्यों इंटरफ़ेस स्थिर सदस्य विधि
- 7. आप सी # में स्थिर संरचना क्यों नहीं घोषित कर सकते हैं, लेकिन उनके पास स्थिर तरीके हो सकते हैं?
- 8. क्या आप स्थिर सदस्य फ़ंक्शन इनलाइन कर सकते हैं?
- 9. एक स्थिर सदस्य
- 10. स्थिर वर्ग सदस्य
- 11. सी ++ में पूर्णांक सदस्य चर (जो स्थिर स्थिर नहीं है) की शुरुआत क्यों है?
- 12. टेम्पलेटेड (स्थिर) सदस्य फ़ंक्शन
- 13. स्थिर constexpr सदस्य समारोह
- 14. कक्षाओं में अनियमित स्थिर सदस्य
- 15. क्यों एक गैर स्थैतिक आंतरिक वर्ग में स्थिर सदस्य (फ़ील्ड और विधियां) नहीं हो सकती हैं?
- 16. स्थिर सदस्य और बूस्ट क्रमबद्धता
- 17. सी ++ में स्थिर परिवर्तनीय सदस्य चर?
- 18. Array.Sort() और Array.IndexOf() विधियों स्थिर क्यों हैं?
- 19. HttpContext.Current स्थिर वर्गों में उपयोग किया गया
- 20. मेरे प्रबंधित बीन्स में मेरे पास स्थिर सार्वजनिक क्षेत्र क्यों नहीं हो सकते हैं?
- 21. क्या सी # विधियां जो * स्थिर हो सकती हैं स्थिर हो सकती हैं?
- 22. कैसे जबकि एक स्थिर सदस्य
- 23. सी ++ dllimport स्थिर डेटा सदस्य
- 24. मैं स्थिर कार्य से केवल स्थिर सदस्यों तक क्यों पहुंच सकता हूं?
- 25. एंड्रॉइड स्थिर वर्गों को पसंद क्यों करता है
- 26. सी ++ निजी विरासत और स्थिर सदस्य/प्रकार
- 27. क्या स्थिर सदस्य स्मृति दक्षता में मदद करते हैं?
- 28. स्थिर वर्गों और कई उदाहरण नीला
- 29. स्थिर तरीकों में स्थानीय चर भी स्थिर हैं?
- 30. सी # (यानी अभिभावक वर्गों के उन लोगों) में सभी स्थिर रचनाकार क्यों नहीं बुलाए जाते हैं?
थोड़ा होमवर्ककी लगता है ... क्या आपने इसे सोचा है? स्थैतिक वर्ग में गैर स्थैतिक सदस्यों को अनुमति देने का क्या उद्देश्य होगा? – mpen
मुझे नियम है कि 'स्थिर वर्ग में गैर स्थैतिक सदस्य नहीं हो सकते हैं' नियम। लेकिन मैं समझना चाहता था क्यों। असल में मुझे स्मृति के संदर्भ में अधिक geeky उत्तरों की उम्मीद है कि कैसे स्थिर कक्षाओं और उनके सदस्यों को संग्रहीत किया जाता है और कैसे गैर स्थैतिक वर्ग और सदस्यों को संग्रहीत किया जाता है। :) – NLV