2012-07-17 14 views
6

मैं कुछ कोड देख रहा हूं जो एक सहकर्मी ने लिखा था और मुझे क्या होने की उम्मीद नहीं है। यहाँ कोड है:यह समझने की कोशिश कर रहा है कि इस मामले में स्थिर कैसे काम कर रहा है

public class SingletonClass 
{ 
    private static readonly SingletonClass _instance = new SingletonClass(); 

    public static SingletonClass Instance 
    { 
     get { return _instance; } 
    } 

    private SingletonClass() 
    { 
     //non static properties are set here 
     this.connectionString = "bla" 
     this.created = System.DateTime.Now; 
    } 
} 

अन्य वर्ग में, मैं ऐसा करने में सक्षम होने की उम्मीद होता:

private SingletonClass sc = SingletonClass.Instance.Instance.Instance.Instance.Instance.Instance; 

और यह उस वर्ग के एक ही उदाहरण के संदर्भ हैं। क्या होता है कि मेरे पास केवल .Instance हो सकता है। कुछ ऐसा जो मैंने उम्मीद नहीं की थी। यदि Instance संपत्ति SingletonClass कक्षा लौटाती है, तो मैं उस लौटे वर्ग पर Instance संपत्ति क्यों नहीं कह सकता हूं और इसी तरह?

उत्तर

12

यदि इंस्टेंस प्रॉपर्टी सिंगलटन क्लास क्लास लौटाती है, तो मैं उस लौटे वर्ग पर इंस्टेंस प्रॉपर्टी क्यों नहीं कह सकता हूं और इसी तरह?

क्योंकि आप केवल SingletonClassप्रकार के माध्यम से .Instance उपयोग कर सकते हैं, उस प्रकार का एक उदाहरण के माध्यम से नहीं।

के बाद से Instance स्थिर है, तो आप इसे प्रकार के माध्यम से प्रवेश करना होगा:

SingletonInstance inst = SingletonInstance.Instance; // Access via type 

// This fails, because you're accessing it via an instance 
// inst.Instance 

आप श्रृंखला इन करने का प्रयास करते हैं, तो आप को प्रभावी ढंग से कर रहे हैं:

SingletonInstance temp = SingletonInstance.Instance; // Access via type 

// ***** BAD CODE BELOW **** 
// This fails at compile time, since you're trying to access via an instance 
SingletonInstance temp2 = temp.Instance; 
+0

ओह ठीक है, उस अर्थ अब बनाता है यह SingletonClass _instance = new SingletonClass(); करने से आप की बचत है का एक उदाहरण लौटा रहा है। – Justin

0

कोड में आप लौट रहे हैं इंस्टेंस के माध्यम से SingletonClass का एक उदाहरण जो सिंगलटन

का एक स्थिर प्रकार है, इसलिए यह आपको SingletonClass.Instance.Instance बी करने की अनुमति नहीं देगा ecause SingletonClass.InstanceSingletonClass

सभी यह कर में करने के लिए इस SingletonClass.Instance.Instance

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