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

 
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

相关文章:

  • 2022-12-23
  • 2021-05-11
  • 2021-08-22
  • 2021-12-14
  • 2021-10-07
  • 2021-09-28
  • 2022-12-23
猜你喜欢
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2021-05-28
  • 2022-12-23
  • 2021-09-15
  • 2021-09-21
相关资源
相似解决方案