以下の例では、コンストラクターで文字列をインターンしていますが、これは問題ありません。ただし、バイナリフォーマッタからオブジェクトを逆シリアル化すると、コンストラクタを呼び出す必要があるため、文字列がインターンされるとは思いません。_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;
}
}