gpt4 book ai didi

c# - 将字符串文字分配给 C# 中的字符串

转载 作者:行者123 更新时间:2023-11-30 20:22:37 25 4
gpt4 key购买 nike

字符串文字在 C# 中是否具有特定类型(如 C++ 中的 const char*),或者 C# 是否只是为程序中出现的每个字符串文字创建一个新的字符串对象?我很想了解执行以下语句时幕后发生的情况:

string s1 = "OldValue";

这是调用字符串类中的特定方法(构造函数,或隐式转换运算符,......)还是 C# 创建一个包含“OldValue”的新字符串对象(然后将其引用分配给 s1,只是就像任何引用类型一样)?

我试图理解在保证 s1 的值保持为“OldValue”的字符串类的设计中是什么:

string s2 = s1;
s2 = "NewValue";

最佳答案

最后一个问题,为什么要保留值 - 它不在 String 类中。这是对象引用的工作方式。

String 类不是值类型,它是引用类型。它是一个功能齐全的对象,当“传递给/来自变量”时不会被复制。

当你写的时候:

string s1 = "mom";
string s2 = s1;
string s3 = s1;
s3 = "dad";

只有一个“mom”的实例,它首先在堆中的某处创建,然后将对它的引用分配给 s1。然后创建另一个引用并将其分配给 s2。然后创建另一个引用并将其分配给 s3。没有副本。引用。就像任何真实的普通 CLR 对象

最后,在最后一行中,在堆上创建了另一个字符串,然后将对它的引用分配给 s3 变量。请注意,这句话绝对没有关于“mom”或 s1/s2 变量。他们什么也没注意到。

请记住,String 不是值类型。它只是一个普通的不可变对象(immutable对象),具有一些方便的 Equals 和 GetHashCode 覆盖。 String 类内部有一些小魔法,但这里不相关。

关于c# - 将字符串文字分配给 C# 中的字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31114798/

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