【问题标题】:Is C# string passed by value or passed by reference? [duplicate]C# 字符串是按值传递还是按引用传递? [复制]
【发布时间】:2016-03-10 15:16:30
【问题描述】:
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; }
  }

}

输出:

金属摇滚

金属摇滚

林肯公园

链接

我的问题是,如果字符串是引用类型(即类),那么为什么在方法 Print()之后它不改变变量 name 的值> 被调用,就像它发生在引用变量 a 的成员 MyString 上一样。

【问题讨论】:

  • “引用类型”并不表示会通过引用传递。

标签: c# class mutable ref


【解决方案1】:

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

【讨论】:

  • 没有。按值传递与按引用传递以及值类型与引用类型是完全不同的主题。它们不相关。
  • 这个答案是错误的。字符串是一种引用类型,但他的引用是按值传递的。进行更改时也不会复制它,而是创建一个新字符串并将其分配给引用;因为引用是按值传递的,所以更改不会反映给调用者。
猜你喜欢
  • 2013-02-09
  • 2013-05-03
  • 2013-01-21
  • 2014-04-08
  • 1970-01-01
  • 1970-01-01
  • 2015-01-12
  • 2016-11-28
相关资源
最近更新 更多