【发布时间】:2015-11-11 11:23:17
【问题描述】:
据我所知,字符串是一个引用类型,当你将一个引用类型发送给一个函数时,如果你改变它的值,原始对象的值就会改变,但是为什么当我调用 change 函数时,原始字符串保持不变。但是当我有一个类的对象并将它发送到一个函数时,它的原始值会改变。这是一个例子:
static void Main(string[] args)
{
string x = "Hi";
Change(x);
Console.WriteLine(x);
var y = new Test();
y.Str = "Hi";
Change(y);
Console.WriteLine(y.Str);
Console.ReadKey();
}
static void Change(string str)
{
str = "Test";
}
static void Change(Test x)
{
x.Str = "Test";
}
字符串的输出是“Hi”而不是“Test”,但对于Test对象它是“Test”
【问题讨论】:
-
字符串是不可变的
-
@TimSchmelter 是的,但这不是这个特定问题的答案。
-
@TheodorosChatzigiannakis:这不是答案,而是评论。 OP 想要修改他传递给方法的字符串。那是行不通的。答案可能是前者修改了局部变量(参数),而后者修改了具有字符串属性的对象。对象是可变的。
-
@TimSchmelter 我的意思是,如果 OP 通过
ref string而不是string,结果将是他/她所期望的。所以不变性不是主要问题。 -
@TimSchmelter 你混合了两个不同的概念。引用类型与“引用调用”无关。当您覆盖变量(不变异)时,引用类型无关紧要。重要的是,它是作为值传递还是作为引用传递。在这种情况下,它作为值传递(即不是由
ref x)
标签: c#