string a = "aaa";
string b = a;
b = "bbb";
Demo(a, b);
Console.WriteLine("a->" + a);
Console.WriteLine("b->" + b);
//Demo
public static void Demo4(string s1, string s2)
{
s1="88";
s2="99";
}
为什么输出的是
a->aaa
b->bbb
而不是
a->88
b->99
string b = a;
b = "bbb";
Demo(a, b);
Console.WriteLine("a->" + a);
Console.WriteLine("b->" + b);
//Demo
public static void Demo4(string s1, string s2)
{
s1="88";
s2="99";
}
为什么输出的是
a->aaa
b->bbb
而不是
a->88
b->99
ByRel
{
s1="88";
s2="99";
}
你这里都没返回值,就是说还是显示s1,s2原来的的值啦。
public static void Demo4(string s1, string s2)
{
s1="88";
s2="99";
}
s1="88";
s2="99";
在这两个语句之前,Demo4中的引用s1与Main方法中的引用保存的是同一对象的地址,
但当Demo4中执行s1="88"时,有产生了一个字符串对象并引用保存在Demo4中的s1,而实参s1还是指向原来的字符串对象,对于s2是同样道理的
string b = a;
b = "bbb";
Demo(ref a, ref b);
Console.WriteLine("a->" + a);
Console.WriteLine("b->" + b);
//Demo
public static void Demo(ref string s1, ref string s2)
{
s1="88";
s2="99";
}在这个例子中,把所有的四个“ref”改成“out”也是可以的。