के लिए सिंगलटन पैटर्न डिजाइन मैं सिंगलटन पैटर्न डिज़ाइन के बारे में जानना चाहता हूं। मैं अपने सिंगलटन वर्ग से प्रति थ्रेड के लिए पृथक उदाहरण बनाना चाहता हूं। तो मैंने नीचे दो डिज़ाइन प्रदान किए।सी # थ्रेडस्टैटिक
यह
class Program
{
static void Main(string[] args)
{
Task.Factory.StartNew(() => Console.WriteLine(SingletonClass.Instance.GetHashCode()));
Task.Factory.StartNew(() => Console.WriteLine(SingletonClass.Instance.GetHashCode()));
Console.ReadLine();
}
}
public sealed class SingletonClass
{
[ThreadStatic]
private static SingletonClass _instance;
public static SingletonClass Instance
{
get
{
if (_instance == null)
{
_instance = new SingletonClass();
}
return _instance;
}
}
private SingletonClass()
{
}
}
कार्य कर रहा है यह काम नहीं कर रहा (NullReferenceException फेंकने और उदाहरण नहीं बनाया जा रहा है।)
class Program
{
static void Main(string[] args)
{
Task.Factory.StartNew(() => Console.WriteLine(SingletonClass.Instance.GetHashCode()));
Task.Factory.StartNew(() => Console.WriteLine(SingletonClass.Instance.GetHashCode()));
Console.ReadLine();
}
}
public sealed class SingletonClass
{
[ThreadStatic]
private static SingletonClass _instance = new SingletonClass();
public static SingletonClass Instance
{
get
{
return _instance;
}
}
private SingletonClass()
{
}
}
मैं वास्तव में सोच रहा हूँ क्यों एक उदाहरण नहीं बनाई गई है दूसरे डिजाइन के लिए। क्या कोई इसे समझा सकता है?
सी # कंपाइलर चर के लिए प्रारंभिक कार्यान्वयन को लागू करने के लिए एक स्थिर कन्स्ट्रक्टर उत्पन्न करता है। सीएलआर एक कठिन गारंटी प्रदान करता है कि यह केवल एक बार चलता है। आपको एक से अधिक बार चलाने के लिए उस 'नए' कथन की आवश्यकता है। –
मुझे विश्वास है, भले ही यह काम करता है या आप इसे काम करने के लिए मिला है, यह अब एक सिंगलटन नहीं है। एक सिंगलटन एकल धागा एकल नहीं होना चाहिए। – CodingYoshi
'कोडिंग योशी' सिंगलटन के विवरण में कहीं भी नहीं कहता है कि यह प्रति थ्रेड नहीं हो सकता है। पूर्व में अन्य भाषाओं में। 'डी' यह प्रति थ्रेड होने के लिए पूरी तरह से सामान्य होगा। चूंकि सबकुछ डिफ़ॉल्ट रूप से धागा-स्थानीय है। – Bauss