在C#中,string是一个引用类型,但是为什么在另一个方法中操作后它没有改变

时间:2012-09-04 09:06:56

标签: c# string reference-type

  

可能重复:
  C# string reference type?

说,我有一个名为

的字符串
string sample = "Initial value";

传递给方法测试()

public static void Test(string testString)
{
    testString = "Modified Value";
}

如果我在通过测试(样品)后打印'样品',我除了它应该打印“修改值”。

但它的印刷“初始价值”。如果字符串是引用类型,为什么会这样呢?

但同样(预期的逻辑),为对象工作。有人可以请我清楚吗?

2 个答案:

答案 0 :(得分:6)

这与string作为引用类型无关。这是因为参数是按值传递的,而不是通过引用传递的。

如果您修改这样的方法,那么参数将通过引用传递:

public static void Test(ref string testString)
{
    testString = "Modified Value";
}

然后sample将被修改。

有关参数传递的详细信息,请参阅this article

答案 1 :(得分:2)

那是因为way how CLR passes the params to method

简单地说:

string sample = "Initial value";  

此处sample变量是指存储在堆中的"Initial value"字符串实例。

public static void Test(string testString) 
{ 
    testString = "Modified Value"; 
}

在方法中,您修改testString变量(sample变量的副本),使其引用堆中的“Modified Value”字符串,使原始sample变量不受影响。