因为在C#里string对象是不变对象,假设有string str1="abc";那么如果存在有这么一条语句对str1进行再次赋值 如str1="123",那么,此时指向str1的栈的地址并未发生改变,而是在托管堆里重新创建一个新的对象,其值为123,而str1的栈指向托管堆里123的地址,而原先的abc即将会被垃圾回收机制清理掉。所以ChangeString函数里对形参s赋值过程是这样子的:形参s首先也指向了abc,但在函数体里s又被指向了HaHa,那么此时是s改变了指向,而实参str并没有改变它原来的指向abc. 所以要想在函数里改变实参的值必须用ref,除对象和集合外。
static void Main(string[] args)
{
string str = "123";
Console.WriteLine(str);
ChangeString(ref str); // 使用ref引用型,形参则可以改变实参的值
Console.WriteLine(str);
Console.ReadKey();
}
public static void ChangeString(ref string s) // 加ref,形参可以更改实参的值
{
s = "HaHa";
}
温馨提示:答案为网友推荐,仅供参考