2009-08-14 7 views
8

वाक्य रचना शायद गलतग # क्या स्थिर वर्ग और गैर स्थिर के बीच अलग है (मैं कक्षा में ही नहीं क्षेत्र के बारे में बात कर रहा हूँ)

public static class Storage 
     { 
       public static string filePath { get; set; } 
     } 

और

public class Storage 
    { 
     private void Storage() {}; 
     public static string filePath { get; set; } 
    } 

मैं से मिला इंटरनेट पर एक उदाहरण। दूसरे का उपयोग क्या है?

+0

@Tuzo - संबंधित डुप्लिकेट नहीं है .. यह प्रश्न तुलना – Gishu

+0

@OP - मुझे लगता है कि आपका दूसरा कोड स्निपेट निजी शून्य संग्रहण() {} होना चाहिए; ... निजी ctor – Gishu

+0

@Gishu क्षमा करें। आप सही हैं :) लेकिन फिर भी हर कोई इसे जानता है, इसे संपादित कर रहा है। –

उत्तर

12

तुम आईएल कोड को देखो, तो स्थिर वर्ग होगा abstract और sealed जिसमें दो महत्वपूर्ण गुणों देता है:

  • आप उदाहरणों से नहीं बना सकते यह
  • यह विरासत में नहीं किया जा सकता

पहले बिंदु का परिणाम यह है कि एक स्थिर वर्ग में गैर स्थैतिक सदस्य नहीं हो सकते हैं। गैर-स्थैतिक वर्ग में स्थिर सदस्यों के कई उपयोग हो सकते हैं। जब तुम रूप स्थिर एक वर्ग की घोषणा

public class SomeClass 
{ 
    public int SomeInt { get; set; } 

    public static SomeClass Create(int defaultValue) 
    { 
     SomeClass result = new SomeClass(); 
     result.SomeInt = defaultValue; 
     return result; 
    } 
} 
+1

एह? आपका उदाहरण एक स्थिर वर्ग नहीं है? – Thorarin

+0

हालांकि यह एक स्थिर वर्ग नहीं है? – Svish

+4

@ थोरिनिन और @ स्विस: यह सही है। यह गैर-स्थैतिक प्रकारों में स्थिर सदस्यों के उपयोग के अंतिम प्रश्न का उत्तर देने के लिए सेवा कर रहा है (जैसा कि मैंने मूल पोस्ट में पिछले प्रश्न का अर्थ दिया था) –

3

कई कक्षाओं में उदाहरण और स्थिर दोनों विधियां हैं। उदाहरण के लिए स्ट्रिंग है:

String.Format(string, arg0, arg1, arg2) // static method 

और

String myString = " Hello world!"; 
myString = myString.Substring(4);  // instance method 

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

2

: एक सामान्य उपयोग एक वर्ग कारखाना है,

    • यह केवल स्थिर सदस्यों के लिए अनुमति दी है यह नहीं कर सकते तत्काल (इसमें कोई सार्वजनिक कन्स्ट्रक्टर नहीं है), और
    • यह विरासत में नहीं मिला (यह मुहरबंद है)।

    कोई भी वर्ग जिसे स्थैतिक घोषित नहीं किया जा सकता है उसे तत्काल, विरासत में प्राप्त किया जा सकता है, और गैर-स्थैतिक सदस्य हो सकते हैं।
    * वे केवल स्थिर सदस्य हो:

  • 5

    यहाँ सरकारी/MSDN गर्म स्थान के बारे में static classes

    एक स्थिर वर्ग की मुख्य विशेषताएं जानने के लिए कर रहे हैं।
    * उन्हें तत्काल नहीं किया जा सकता है।
    * वे मुहरबंद हैं।
    * वे उदाहरण कंस्ट्रक्टर्स

    नहीं हो सकते मूल रूप से एक स्थिर वर्ग एक 'सामान्य'/गैर स्थैतिक कक्षा जो केवल स्थिर तरीकों और एक निजी ctor है के समान है। इसे स्थैतिक के रूप में चिह्नित करने से इरादे को स्पष्ट करने में मदद मिलती है और कुछ चीजों को अस्वीकार करने के लिए संकलक कुछ संकलन-समय जांच करता है। तत्काल अस्वीकार करें।

    वास्तविक दुनिया का उपयोग करता है मैं के बारे में सोच सकते हैं: इसका इस्तेमाल घर या एक मार्ग के रूप

    • उपयोगिता तरीके (तरीकों एक प्रकार के किसी भी मामले से संबद्ध नहीं) जैसे व्यवस्थित करने के लिए न्यूनतम और अधिकतम विधियों के लिए गणित
    • विस्तार विधियां उदा। स्टॉपवॉच
    3

    स्टेटिक क्लास केवल सी # 2 ऊपर से उपलब्ध हैं, पर रीसेट विधि के लिए StopWatchExtensions। सी # 1 में आपको अपनी कक्षा को सील करना होगा और यह निर्दिष्ट करना होगा कि इस प्रकार के व्यवहार को प्राप्त करने के लिए यह एक निजी कन्स्ट्रक्टर जोड़ा गया है।

    1

    एक स्थैतिक वर्ग मूल रूप से गैर-स्थैतिक वर्ग के समान होता है, लेकिन एक अंतर होता है: एक स्थिर वर्ग को तत्काल नहीं किया जा सकता है। दूसरे शब्दों में, आप वर्ग प्रकार के चर बनाने के लिए नए कीवर्ड का उपयोग नहीं कर सकते हैं। चूंकि कोई आवृत्ति परिवर्तनीय नहीं है, इसलिए आप क्लास नाम का उपयोग करके एक स्थिर वर्ग के सदस्यों तक पहुंच सकते हैं।

    public static class Storage 
         { 
           public static string filePath { get; set; } 
         } 
    
    इस में

    , वर्ग filepath साथ instantiate.so ही नहीं होने चाहिए, यह सब वस्तु के लिए वर्ग भंडारण की अनूठी मूल्य पर कब्जा होगा।

    public class Storage 
        { 
         private void Storage {}; 
         public static string filePath { get; set; } 
        } 
    
    इस में

    , वर्ग गैर स्थिर है, का दृष्टांत

    0

    हम चर जानते हैं और कार्यों दो प्रकार-उदाहरण और वर्ग के होते हैं के रूप में की जरूरत है।

    एक स्थैतिक वर्ग- केवल कक्षा चर कोई आवृत्ति चर नहीं है।

    इसलिए तत्काल नहीं किया जा सकता है, केवल classname.method() द्वारा पहुंचा जा सकता है।

    इसमें केवल निजी निर्माता हैं, कोई सार्वजनिक निर्माता नहीं है।

    एक स्थिर वर्ग में केवल स्थिर सदस्य होते हैं।