C#引用类型参数,ref按引用传值

引用类型参数,ref按引用传值

出处:http://blog.sina.com.cn/s/blog_6edd550601012rj8.html

void operatorstring(StringBuilder sb1, StringBuilder sb2)

对sb1和sb2的操作会反应在s1和s2的值上面。但是当sb1或者sb2的引用转向其地方,则和s1,s2的值脱离干系了。

static void Main(string[] args)

{

StringBuilder s1 = new StringBuilder("a");

StringBuilder s2 = new StringBuilder("b");

operatorstring(s1, s2);

Console.WriteLine(s1.ToString() + "," + s2.ToString());

}

static void operatorstring(StringBuilder sb1, StringBuilder sb2)

{

sb1.Append("c");

//sb2 = new StringBuilder();

sb2.Append("c");

}

此代码打印出ab,ac

但当去掉注释,变成

static void operatorstring(StringBuilder sb1, StringBuilder sb2)

{

sb1.Append("c");

sb2 = new StringBuilder();

sb2.Append("c");

}

则打印出ac,b。

要真正的传递引用,则要使用ref关键字

[STAThread]

static void Main(string[] args)

{

StringBuilder s1 = new StringBuilder("a");

StringBuilder s2 = new StringBuilder("b");

operatorstring(s1, ref s2);

Console.WriteLine(s1.ToString() + "," + s2.ToString());

}

static void operatorstring(StringBuilder sb1, ref StringBuilder sb2)

{

sb1.Append("c");

sb2 = new StringBuilder();

sb2.Append("c");

}

此代码打印出ac,c