C#字符串是按值传递还是通过引用传递?

时间:2015-12-05 18:54:35

标签: c# class mutable ref

namespace Test
{
  class Program
  {
    static void Main(string[] args)
    {
      A a = new A();
      a.MyString = "Metallica ";
      PrintA(a);
      Console.WriteLine(a.MyString);

      string name = "Linkin ";
      Print(name);
      Console.WriteLine(name);

      Console.ReadLine();
    }

    static void PrintA(A a)
    {
      a.MyString = a.MyString + "Rocks";
      Console.WriteLine(a.MyString);
    }

    static void Print(string text)
    {
      text = text + "Park";
      Console.WriteLine(text);
    }
  }

  class A
  {
    public string MyString { get; set; }
  }

}

输出:

  

Metallica Rocks

     

Metallica Rocks

     

林肯公园

     

林肯

我的问题是,如果string是引用类型(即类),那么为什么它不会在方法 Print() name 的值>被调用,就像参考变量 a 的成员 MyString 一样。

1 个答案:

答案 0 :(得分:1)

在.NET中,String是一种引用类型。它通过引用传递。但是,当您对字符串值进行更改时,会创建另一个新副本,而原始文件保持不变。这就是为什么它的行为就像是按值发送