2010-03-17 9 views
10

सी # स्थिर कन्स्ट्रक्टर और जावा स्थैतिक ब्लॉक के बीच वास्तविक अंतर क्या है?एक जावा स्थिर ब्लॉक एक सी # स्थिर कन्स्ट्रक्टर के बराबर है?

वे दोनों पैरामीटर रहित होना चाहिए। वे दोनों केवल एक बार बुलाए जाते हैं, जब संबंधित वर्ग का पहले उपयोग किया जाता है।

क्या मुझे कुछ याद आ रहा है, या वे एक ही बात हैं, बस अलग-अलग नामों के साथ?

उत्तर

9

वे समकक्ष हैं, सिवाय इसके कि एक सी # कक्षा में केवल एक स्थिर कन्स्ट्रक्टर (प्लस स्थैतिक क्षेत्र प्रारंभकर्ता) हो सकता है।

इसके अलावा, सी # में, static कन्स्ट्रक्टर beforefieldinit flag लागू करेगा।

+0

जाहिर है जावा किसी भी पहलेफील्डिनिट झंडे को लागू नहीं करेगा, क्योंकि यह एमएसआईएल के लिए संकलित नहीं है। – Joren

+0

@ जोरेन: मुझे एहसास है। हालांकि, यह दो विशेषताओं के व्यवहार में एक अंतर है। – SLaks

+2

हां, लेकिन मेरा (इतना स्पष्ट नहीं है, मैं मानता हूं) बिंदु था: क्रियान्वयन विवरण के संदर्भ में कोड अर्थशास्त्र (यानी फील्ड प्रारंभिकरण और स्थैतिक कन्स्ट्रक्टर का क्रम) के संदर्भ में अंतर को समझाने के लिए और अधिक उपयोगी हो सकता है। (विशेष रूप से जब यह विवरण है कि दो भाषाओं में से किसी एक के लिए कोई अर्थ नहीं है।) – Joren

-2

वे नहीं हैं।

सी # में, ब्लॉक केवल रचनाकारों को पकड़ सकते हैं। जावा में आप कथन निष्पादित करने में सक्षम हैं।

+1

सच नहीं है। सी # स्थैतिक रचनाकार बयान निष्पादित कर सकते हैं। – Aaron

1

वे एक ही, निम्न उदाहरण से पता चलता है कि सी # स्थिर निर्माता जावा में स्थिर ब्लॉक के रूप में ही काम करता दिखेगा

protected Singleton() 
{ 
    Console.WriteLine("Singleton constructor"); 
} 

    private static readonly Singleton INSTANCE; 

    static Singleton() { 
     try { 
      INSTANCE = new Singleton(); 
     } 
     catch(Exception e) { 
      throw new Exception(); 
     } 
    } 
0

हाँ वे बराबर हैं एक और मुद्दा जावा स्थिर निर्माता का समर्थन नहीं करता, लेकिन स्थिर का समर्थन है ब्लॉक और सी # समर्थन स्थिर कन्स्ट्रक्टर।

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