2011-03-09 21 views
33

मैं दो वर्गों क्लास ए और ClassB है:एक स्थैतिक वर्ग में एक स्थिर स्थैतिक वर्ग और स्थैतिक तरीकों में स्थिर तरीकों के बीच क्या अंतर है?

static class ClassA 
    { 
     static string SomeMethod() 
     { 
      return "I am a Static Method"; 
     } 
    } 

    class ClassB 
    { 
     static string SomeMethod() 
     { 
      return "I am a Static Method"; 
     } 
    } 

मैं पता है कि क्यों करते हैं, वर्ग का उदाहरण बनाकर बिना ClassA.SomeMethod(); और ClassB.SomeMethod();

जब वे दोनों पहुँचा जा सकता है के बीच अंतर है चाहता हूँ हमें केवल एक गैर स्थैतिक वर्ग का उपयोग करने और विधियों को स्थिर के रूप में घोषित करने के बजाय एक स्थिर वर्ग बनाने की आवश्यकता है?

उत्तर

32

केवल अंतर यह है कि एक nonstatic वर्ग में स्थिर तरीकों extension methods नहीं किया जा सकता है।


दूसरे शब्दों में, यह अमान्य है:

class Test 
{ 
    static void getCount(this ICollection<int> collection) 
    { return collection.Count; } 
} 

इस जबकि मान्य है:

static class Test 
{ 
    static void getCount(this ICollection<int> collection) 
    { return collection.Count; } 
} 
13

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

एक स्थैतिक विधि यह सुनिश्चित करती है कि, यदि आप एकाधिक क्लासब ऑब्जेक्ट्स बनाना चाहते हैं, तो वे केवल एक एकल, साझा SomeMethod फ़ंक्शन का उपयोग करेंगे।

तकनीकी रूप से, क्लास के कुछ मोड को छोड़कर कोई अंतर नहीं है, स्थिर होना चाहिए।

0

एक स्थिर विधि वर्ग के अंतर्गत आता है और एक गैर स्थैतिक विधि एक वर्ग की एक वस्तु के अंतर्गत आता है। यही है, एक गैर स्थैतिक विधि केवल उस वर्ग के किसी ऑब्जेक्ट पर बुलाया जा सकता है जिसका वह संबंधित है। एक स्थैतिक विधि केवल स्थिर सदस्यों तक पहुंच सकती है। एक गैर स्थैतिक विधि स्थैतिक और गैर स्थैतिक सदस्यों दोनों तक पहुंच सकता है क्योंकि उस समय जब स्थैतिक विधि कहा जाता है, तब कक्षा को तत्काल नहीं किया जा सकता है (यदि इसे कक्षा में ही कहा जाता है)। दूसरे मामले में, एक गैर स्थैतिक विधि केवल तभी बुलाया जा सकता है जब कक्षा पहले से ही तत्काल हो चुकी है। कक्षा के सभी उदाहरणों द्वारा एक स्थिर विधि साझा की जाती है। जब भी सी ++/जावा/सी # में एक विधि कहा जाता है, तो एक निहित तर्क ('यह' संदर्भ) अन्य पैरामीटर के साथ/बिना पास किया जाता है। स्थिर विधि कॉल के मामले में, 'यह' संदर्भ पारित नहीं होता है क्योंकि स्थैतिक विधियां कक्षा से संबंधित होती हैं और इसलिए 'यह' संदर्भ नहीं होता है।

+0

हम कक्षा के किसी ऑब्जेक्ट से एक स्थिर विधि कैसे कॉल कर सकते हैं, कृपया मुझे एक उदाहरण दें – Vamsi

+0

"क्लास के साथ-साथ कक्षा के ऑब्जेक्ट दोनों पर एक स्थिर विधि भी कहा जा सकता है।"मुझे विश्वास है कि यह कथन गलत है। – Mahesh

2

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

एक स्थिर वर्ग में कोई कन्स्ट्रक्टर नहीं है, इसलिए आप इसका उदाहरण नहीं बना सकते हैं। इसके अलावा संकलक एक त्रुटि देता है जब आप इसे एक उदाहरण विधि जोड़ते हैं (जहां आप एक स्थिर विधि का मतलब था)।

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