c# - 当我们将字符串变量作为 ref 参数传递给函数并在函数中更改字符串变量的值时

标签 c# string immutability

static void Main()
{
   String str="sample";
   ChangeString(ref str);
}
void ChangeString(ref string str)
{ 
   str="New Sample";
}

在内存方面,当我们将 ref 指针传递给对象时,它将创建新实例或更新现有实例

最佳答案

将引用类型作为参数传递不会创建新实例,无论是否使用 ref 关键字。 ChangeString 方法中的代码将为变量分配一个新实例。

.NET 中的字符串是不可变的,因此您无法更改它们。将字符串分配给字符串变量时,变量中的引用将替换为对新字符串的引用。


请注意,文字字符串 "sample""New Sample" 的字符串对象都是在应用程序启动时创建的。分配发生时,代码不会创建任何新的字符串实例,它只会获取对先前创建的字符串对象的引用。

关于c# - 当我们将字符串变量作为 ref 参数传递给函数并在函数中更改字符串变量的值时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27798624/

相关文章:

php - 用字符串中的单词创建链接

c# - C# 中的不可变和只读是什么意思?

javascript - 无法使过滤器与 Immer.js 一起使用以删除数组中的嵌套对象

c# - 在 C# 4.0 中,为什么方法中的输出参数不能协变?

c# - 保护客户端json

c# - SSL gRPC 客户端在 C# 中工作正常,但在 C++ 中因 UNAVAILABLE "Empty update"而失败

c++ - 从函数返回一个不可变的 POD 类

c# - 在相同属性上将一个对象映射到另一个对象的表达式

java - 如何循环回到字符串的开头? super 技能,加密-解密

java - Java中的字符串分割函数