gpt4 book ai didi

c# - C# 中字符串的行为

转载 作者:行者123 更新时间:2023-11-30 19:03:13 25 4
gpt4 key购买 nike

我是一名 C++ 程序员,现在从事 C# 项目。

我试图在下面的代码片段中理解为什么即使函数正在更改它的值,字符串的值也不会改变,我认为它是一个对象并且将作为引用传递。

public class TestClass
{
public TestClass(String passedStr)
{
passedStr = "Change me";
}
}
class Program
{
static void Main(string[] args)
{
String aString="I am what i am";
TestClass obj = new TestClass(aString);
Console.WriteLine(aString);

}
}

但是用户定义类的行为是不同的。

 public class TestClass
{
private int x;
public int ID
{
get
{
return x;
}
set
{
x = value;
}
}
public TestClass(int a)
{
x = a;
}
}
public class Tester
{
public Tester(TestClass obj)
{
obj.ID = 999;
}
}

class Program
{
static void Main(string[] args)
{

TestClass obj = new TestClass(555);
Tester tester = new Tester(obj);
Console.WriteLine(obj.ID);
}
}

最佳答案

让我们回到基础。

变量是一个存储位置。

字符串类型的变量是存储空值或字符串引用的存储位置。

“passedStr”和“aString”是不同的变量

当您调用“new TestClass(aString)”时,您为“passedStr”创建了一个新的存储位置,并将“aString”的内容复制到其中。您现在有两个具有相同内容的变量:对字符串的引用。

在构造函数中,您更改存储在“passedStr”存储位置中的值。 “aString”保持不变。

C# 中的“ref”和“out”关键字表示“使形式参数和参数成为彼此的别名”。在这种情况下,您只有 一个 具有两个不同名称 的变量。当您更改其中一个时,另一个也会更改,因为它们是相同的变量。

关于c# - C# 中字符串的行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5866187/

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