मान लीजिए कि परिदृश्य एक अपरिवर्तनीय प्रकार को लागू करने की अनुमति नहीं देता है। उस धारणा के बाद, मैं राय/उदाहरणों को सही तरीके से डिजाइन करने के तरीके पर विचार करना चाहता हूं कि इसका उपभोग करने के बाद, अपरिवर्तनीय हो जाता है।एक म्यूटेबल क्लास डिज़ाइन करें जो इसके उपभोग के बाद अपरिवर्तनीय हो जाता है
public class ObjectAConfig {
private int _valueB;
private string _valueA;
internal bool Consumed { get; set; }
public int ValueB {
get { return _valueB; }
set
{
if (Consumed) throw new InvalidOperationException();
_valueB = value;
}
}
public string ValueA {
get { return _valueA; }
set
{
if (Consumed) throw new InvalidOperationException();
_valueA = value;
}
}
}
जब ObjectA
खपत ObjectAConfig
:
public ObjectA {
public ObjectA(ObjectAConfig config) {
_config = config;
_config.Consumed = true;
}
}
मैं संतुष्ट है कि इस बस काम करता है नहीं कर रहा हूँ, मैं, के रूप में कहा एक बेहतर पैटर्न (बाहर रखा गया हो, तो जानना चाहते हैं, ObjectAConfig
द्वारा अपरिवर्तनीय बना शुरुआत से डिजाइन)।
भावना
उदाहरण के लिएOnce<T>
की तरह एक इकाई है कि अनुमति देते हैं लिपटे मूल्य केवल एक बार प्रारंभ करने के लिए परिभाषित कर सकते हैं:?
एक ऐसे प्रकार को परिभाषित कर सकता है जो प्रकार को एक निजी क्षेत्र में बदल देता है? अर्थात आप इसे रोक सकते हैं -
* क्यों * आप एक अपरिवर्तनीय प्रकार को लागू नहीं कर सकते? यदि आपने उस वास्तविक समस्या को समझाया है जिसे आप हल करने का प्रयास कर रहे हैं तो इससे मदद मिलेगी। –
[यह प्रश्न] (http://stackoverflow.com/questions/4168382) में कुछ दिलचस्प पैटर्न समान चीजें कर रहे हैं। –