闲的无聊,记忆中好像是在c/c++语言中string为传址模式(函数修改参数时会影响原来的string参数值),比较好奇c#下对于string参数到底是传值还是传址有些疑问,便亲自测试。
1、结果aa仍然为test,没有被调用函数改变。string 改成String,也不行,没被当作普通对象,而是视为基本值类型模式。因此string传参为传值模式
[TestMethod]
public void TestMethod1()
{
string aa = "test";
ChangeValue(aa);
Assert.AreEqual(aa, "testchange");
}
private void ChangeValue(string bb)
{
bb = bb+"change";
}
2、而用其他对象测试发现为传址模式,原有值被改变。
public void TestMethod1()
{
var aa = new List<String>();
aa.Add("test");
ChangeValue(aa);
Assert.AreEqual(aa[0], "testchange");
}
private void ChangeValue(List<String> bb)
{
bb[0]=bb[0]+"change";
}