2010-06-03 54 views
5

在下面的例子中,我在构造函数中实习字符串,这很好。然而,当我从二进制格式化器反序列化对象时,我不认为该字符串将被调用,因为构造函数应该被调用。我应该如何确保_name字符串被拦截? ...或者它会被拦截好吗?我应该如何处理字符串在反序列化中的实习?

编辑:所以它似乎工作(正确实习字符串)没有处理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; 
    } 
} 
+1

你为什么明确实习生字符串?这是.net的内部机制。 – Andrey 2010-06-03 12:00:29

回答

2

如果实现了ISerializable接口(而不是属性)这是可能的。它会让你做反序列化。

但它似乎很没有必要。你确定你正在完成任何事情吗?

+3

是的。节省内存 – DayOne 2010-06-03 12:00:35

+1

这是一个微型优化...您必须有一个非常好的理由,例如使用嵌入式系统,才能将其作为字符串Interning的原因。 – Dykam 2010-06-03 12:25:14

+2

我有充足的理由欢呼 – DayOne 2010-06-03 12:38:13

相关问题