2012-10-01 17 views
7

सिंगलटन के साथ सी # कार्यान्वित की तरह हो सकता है:स्थैतिक संपत्ति और सिंगलटन के बीच क्या अंतर है?

public class Singleton 
{ 
    private static Singleton instance; 

    private Singleton() {} 

    public static Singleton Instance 
    { 
     get 
     { 
     if (instance == null) 
     { 
      instance = new Singleton(); 
     } 
     return instance; 
     } 
    } 
} 

अगर मैं लागू करने के लिए स्थिर का उपयोग यह पसंद:

public static class Globals{ 
    public static Singleton Instance = new Singleton(); 
} 
इस तरह से

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

उत्तर

8

आप दूसरा दृष्टिकोण का उपयोग करते हैं:

public static class Globals{ 
    public static Singleton Instance = new Singleton(); 
} 

कुछ नहीं कर से किसी को रोकने नहीं है:

Singleton anotherInstance = new Singleton(); // Violates singleton rules 

तुम भी नहीं एक ही आलसी आरंभीकरण अपने पहले संस्करण (प्रयास करने के लिए) मिलता है प्राप्त , साथ ही आप एक सार्वजनिक क्षेत्र का उपयोग कर रहे हैं, जो आपको भविष्य में समान लचीलापन की अनुमति नहीं देता है यदि आपको मूल्य बदलने के दौरान क्या होता है, तो उसे बदलने की आवश्यकता होती है।

ध्यान दें कि .NET 4 एक सिंगलटन बनाने के लिए एक संभावित बेहतर दृष्टिकोण प्रदान करता है:

public class Singleton 
{ 
    private static readonly Lazy<Singleton> instance = new Lazy<Singleton>(()=> new Singleton()); 

    private Singleton() {} 

    public static Singleton Instance 
    { 
     get 
     { 
     return instance.Value; 
     } 
    } 
} 

यह अच्छा है, क्योंकि यह पूरी तरह से आलसी है और पूरी तरह से सुरक्षित थ्रेड, लेकिन यह भी सरल।

+0

हम धागा सुरक्षित के लिए यहां प्रवेश * स्थिर निर्माता * घोषित करने के लिए की जरूरत है? –

+0

@CuongLe 'आलसी ' संस्करण के साथ नहीं। यह बहुत अच्छा है कि यह एक साधारण एपीआई के साथ उचित थ्रेड सुरक्षा और सही आलसी तात्कालिकता प्रदान करता है। –

+0

आह, हाँ, मुझे मिल गया, +1 –

-1

नीचे स्थिर और सिंगलटन के बीच कुछ मतभेद हैं: जबकि स्थिर एक कीवर्ड है

  1. सिंगलटन एक पैटर्न है।
  2. सिंगलटन कक्षा में स्थैतिक और गैर स्थैतिक विधि हो सकती है, लेकिन स्थैतिक वर्ग में केवल स्थिर सदस्य और विधियां हो सकती हैं।
  3. हम सिंगलटन कक्षा में इंटरफ़ेस को कार्यान्वित कर सकते हैं लेकिन स्थिर वर्ग में हम इंटरफ़ेस को कार्यान्वित नहीं कर सकते हैं।
  4. हम सिंगलटन कक्षा का विस्तार कर सकते हैं, जबकि हम स्थिर वर्ग जो हम नहीं कर सकते हैं, यानी सिंगलटन कक्षा किसी भी प्रकार की कक्षा से ली जा सकती है।
के लिए

अधिक static vs Singleton

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