नीचे दिए गए उदाहरण में मैं कन्स्ट्रक्टर में स्ट्रिंग को इंटर्न कर रहा हूं जो ठीक है। हालांकि जब मैं बाइनरी फॉर्मेटर से वस्तु को निराश करता हूं तो मुझे नहीं लगता कि स्ट्रिंग को प्रशिक्षित किया जाना चाहिए क्योंकि कन्स्ट्रक्टर को कॉल किया जाना चाहिए। मुझे _name स्ट्रिंग को इंटर्न करने के लिए कैसे सुनिश्चित किया जाना चाहिए? ... या यह ठीक से प्रशिक्षित किया जाएगा?मुझे deserialization पर स्ट्रिंग इंटर्निंग को कैसे संभालना चाहिए?
संपादित करें: तो यह OnDeserializedAttribute से निपटने के बिना (सही ढंग से इंटर्न तार) काम करने के लिए लगता है। इससे ऐसा कैसे होता है?
मैं एक स्मृति प्रोफाइलर उपयोग कर रहा हूँ, के साथ या विधि नीचे यह अभी भी तार इंटर्न के बिना? जादू? : -/
[OnDeserializedAttribute]
private void OnDeserialized(StreamingContext context)
{
_name = string.Intern(_name);
}
धन्यवाद
[Serializable]
class City
{
private readonly string _name;
public City(string t)
{
_name = string.Intern(t);
}
public string Name
{
get { return _name; }
}
public override string ToString()
{
return _name;
}
}
आप स्पष्ट रूप से आंतरिक स्ट्रिंग क्यों करते हैं? यह .NET का आंतरिक तंत्र है। – Andrey