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