不変の文字列に関する研究をしていて、オブジェクトが作成された後に文字列オブジェクトの内容を変更できないことを理解しています。c#不変の文字列が常に更新される
タイマースレッドがループするたびに更新される何らかの「ステータス」オブジェクトを常に更新するオブジェクトが必要です。
私の質問は、このようなオブジェクトには何が使えますか?
StringBuilderは連結が必要な文字列がたくさんある場合に有効ですが、値を追加する代わりに効率的に値を変更することができます。
カスタム列挙型を使用できますか?
get set accessorsを持つ文字列プロパティを持つカスタムクラスはどうですか?もう一度文字列プロパティは不変です - または間違っていますか?ここで
は、いくつかのサンプルコードです:
string status = "IDLE";
System.Threading.Timer timer = null;
System.Threading.TimerCallback callback = new System.Threading.TimerCallback(delegate
{
status = getStatus();
timer.Change(100, Timeout.Infinite);
});
timer = new System.Threading.Timer(callback, null, 0, Timeout.Infinite);
を使用することができ、あなたは、ガベージコレクションを心配することはありません(まったく明白な状況を除いて) – kai
文字列オブジェクトは不変です。つまり、文字オブジェクトの一部の文字を置き換えることはできません。これで、変数、フィールド、またはプロパティに異なる文字列を割り当てることはできません。 'string a =" foo "; a = "bar"は完璧です。 'a'は文字列への参照なので、実際には別の文字列を指すだけです。 –
したがって、文字列が作成されると、文字列が変更されたときにその文字列の参照のみが変更されるため、文字列がその場所を保持します(新しいメモリを持つ新しい文字列は作成されません)。 – langjacques