gpt4 book ai didi

c# - "Immutable strings are threadsafe"是什么意思

转载 作者:太空狗 更新时间:2023-10-29 23:39:22 26 4
gpt4 key购买 nike

我最近开始阅读 C# 中的可变对象和不可变对象(immutable对象),无论我在哪里阅读,我发现不变的东西是不可变的,这使得事物在用作哈希表中的键时变得线程安全和有用,但我不明白的是这个概念是在我们无法更改内容的同时我们可以更改引用:

string s = "Hi";
s = "Bye";

虽然此处 s 的引用更改为“再见”,但主要是 s 的内容(或者更确切地说它指向的内容)已经更改,并且从编程的角度来看是相同的,所以如果字符串被更改,这如何使特定函数线程安全或可用于哈希表??

最佳答案

简单。如果您要将 s 传递给在不同线程上运行的代码,则此代码将在传递参数时接收到 s 指向的字符串。与 .net 中的所有字符串一样,它不会随时间变化,因此您的线程代码无需考虑您可能会将 s 重新分配给不同的值。

如果您将“Bye”分配给 s,原始字符串将继续存在(直到其被垃圾回收),并且您的变量 s 指向一个新字符串。

在字典中,它略有不同。如果您更改可变键使其哈希码发生变化,则字典将无法找到该键:哈希码用于在索引中进行搜索,如果哈希码随时间发生变化,字典将无法找到正确的记录。所以这并不是真的需要不变性,但不变性将确保哈希码计算的一致性。

不变性对您的作用是,它使您能够将对象视为值类型(例如 int),这通常更容易推理。

关于c# - "Immutable strings are threadsafe"是什么意思,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19080341/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com