ref问题,请讲解
麻烦各位帮我看一下下面2个程序,我对ref输出结果有点混淆了 请多指点
public static void ValueParam(string str)
{
str = "251";
}
public static void RefParam(ref string str)
{
str = "250";
}
public static void Main()
{
string str = "249";
ValueParam(str);
Console.WriteLine(" Value Param:"+str);
RefParam(ref str);
Console.WriteLine(" Ref Param:"+str);
}
结果为:
Value Param:249 //这里结果为249和下面程序的b我就混淆搞不清楚了
Ref Param:250 //250我能理解
------------------------
public class MyClass
{
public static void TestRef(ref char i)
{
i = 'b';
}
public static void TestNoRef(char i)
{
i = 'c';
}
public static void Main()
{
char i = 'a';
TestRef(ref i);
Console.WriteLine(i);
TestNoRef(i);
Console.WriteLine(i);
}
}
大家很容易看出输出结果是:
b //我也能理解
b //这里用的是TestNoRef(i)为什么输出也是b呢?如果按上一个程序的思想结果应该是a才是啊
到底是网上的程序错了还是我的理解错了呢
------解决方案-------------------- string str = "249"; //str="249"
ValueParam(str); //str="249",因为是by value的,所以str的引用不变,str的引用的还是之前的"249"对象
Console.WriteLine(" Value Param:"+str); //str="249"
RefParam(ref str); //str="250",因为是by ref的,所以str的引用修改变成引用"250"对象
Console.WriteLine(" Ref Param:"+str); //str="250"
char i = 'a '; //i='a'
TestRef(ref i); //i='b',因为是by ref的,所以i的值修改了
Console.WriteLine(i); //i='b'
TestNoRef(i); //i='b',因为是by value的,所以i不变,i的值还是之前的'b'
Console.WriteLine(i); //i='b'
------解决方案--------------------上面很详细了
by ref 就是将参数的指针传给函数, 结果就是参数会被函数修改
by val 就是传一个值的copy , 原参数不会被修改。
------解决方案--------------------ref就是传递了引用,所以修改会被保存下来