c# 不可变字符串不断更新
c# immutable string constantly updated
我一直在对不可变字符串进行一些研究,了解到字符串对象的内容在创建对象后无法更改 - 相反,每次都会创建一个新字符串。
我需要一个不断更新的对象 - 一个 "status" 某种类型的对象,每次定时器线程进行循环时都会更新。
所以我的问题是我可以为这样的对象使用什么?
如果有一大堆字符串需要连接,StringBuilder 就很好,但它是否可以有效地用于更改其值而不是追加更多值。
我可以使用自定义枚举吗?
使用带有 get set 访问器的字符串 属性 的自定义 class 怎么样,但是字符串 属性 又是不可变的 - 还是我错了?
下面是一些示例代码:
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);
即使字符串是不可变的,您在 property/attribute/field 中存储的也不是字符串本身,而是对字符串的引用。
这意味着您可以随时替换引用。
回答你的问题:你可以完美地使用字符串
我一直在对不可变字符串进行一些研究,了解到字符串对象的内容在创建对象后无法更改 - 相反,每次都会创建一个新字符串。
我需要一个不断更新的对象 - 一个 "status" 某种类型的对象,每次定时器线程进行循环时都会更新。
所以我的问题是我可以为这样的对象使用什么?
如果有一大堆字符串需要连接,StringBuilder 就很好,但它是否可以有效地用于更改其值而不是追加更多值。
我可以使用自定义枚举吗?
使用带有 get set 访问器的字符串 属性 的自定义 class 怎么样,但是字符串 属性 又是不可变的 - 还是我错了?
下面是一些示例代码:
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);
即使字符串是不可变的,您在 property/attribute/field 中存储的也不是字符串本身,而是对字符串的引用。
这意味着您可以随时替换引用。
回答你的问题:你可以完美地使用字符串