स्वीकार करता है मैं एक स्थिर वर्ग या सिंगलटन क्लास बनाना चाहता हूं जो उसके कन्स्ट्रक्टर में किसी अन्य ऑब्जेक्ट के संदर्भ को स्वीकार करता हो। स्टेटिक कक्षाएं बाहर हैं, लेकिन मुझे लगा कि मैं एक सिंगलटन बना सकता हूं जो इसके कन्स्ट्रक्टर में पैरामीटर स्वीकार करता है। अब तक मुझे वाक्यविन्यास को समझने या गुमराह करने की कोई किस्मत नहीं है। क्या यह संभव है? यदि ऐसा है, तो मुझे इसे कैसे करना है?सी # सिंगलटन कन्स्ट्रक्टर के साथ जो पैरामीटर
प्रारंभिक पोस्ट में कोई उदाहरण के लिए खेद है, मैंने इसे जल्दी में लिखा था। मुझे यह एहसास है कि मेरा जवाब पहले से ही जवाब में है, लेकिन यहां कुछ स्पष्टीकरण है जो मैं करना चाहता हूं:
मैं एक विशिष्ट प्रकार (सिंगलटन ने कहा) का एक उदाहरण बनाना चाहता हूं, लेकिन उस एकल उदाहरण प्रकार को किसी भिन्न ऑब्जेक्ट का संदर्भ रखने की आवश्यकता है।
उदाहरण के लिए, मैं सिंगलटन "स्टेटस" क्लास बनाना चाहता हूं, जो स्ट्रिंगबिल्डर ऑब्जेक्ट और ड्रॉ() विधि का मालिक है जिसे स्क्रीन पर स्ट्रिंगबिल्डर कहा जाता है। ड्रा() विधि को आकर्षित करने के लिए मेरे ग्राफ़िसडिवाइस के बारे में जानना आवश्यक है। तो क्या मैं इसे ऐसा करना चाहते हैं:
public class Status
{
private static Status _instance;
private StringBuilder _messages;
private GraphicsDevice _gDevice;
private Status(string message, GraphicsDevice device)
{
_messages.Append(message);
_gDevice = device;
}
// The following isn't thread-safe
// This constructor part is what I'm trying to figure out
public static Status Instance // (GraphicsDevice device)
{
get
{
if (_instance == null)
{
_instance = new Status("Test Message!", device);
}
return _instance;
}
}
public void UpdateMessage
...
public void Draw()
{
// Draw my status to the screen, using _gDevice and _messages
}
}
सभी कोड पर, मैं अपने स्थिति सिंगलटन निकालते हैं और अपने विधि UpdateMessage() कहते हैं।
private Status _status = Status.Instance; // + pass reference to GraphicsDevice
_status.UpdateMessage("Foo!");
फिर, अपने मुख्य वर्ग में मैं भी सिंगलटन पुनः प्राप्त करेगा और आकर्षित यह:
_status.Draw();
हाँ, इसका मतलब है कि मैं जहाँ भी सिंगलटन पुनः प्राप्त है, मैं में पारित करके ऐसा करने की आवश्यकता ग्राफिक्सडिवाइस के संदर्भ में, अगर पहली बार मैं सिंगलटन को तुरंत चालू करता हूं। और मैं अपने सिंगलटन क्लास में ग्राफिक्सडिवाइस के रूप में मौलिक के रूप में कुछ हासिल करने के लिए विभिन्न माध्यमों का उपयोग/कर सकता हूं, उदाहरण के लिए कहीं और एक सेवा पंजीकृत करें और स्थिति क्लास में वह सेवा प्राप्त करें। इस उदाहरण में काफी योगदान हुआ - मैं यह पता लगाने की कोशिश कर रहा हूं कि कुछ इस पैटर्न की तरह पहली जगह संभव है।
जो मैं पूछ रहा था उसके बारे में एक बेहतर बेहतर स्पष्टीकरण जोड़ा गया। –