日期:2014-05-17  浏览次数:20777 次

调用方法后,参数都是引用类型,为何结果不同?
class Program
  {
  static void Main(string[] args)
  {
  string name = "text";
  Change(name);
  Person p1 = new Person();
  p1.Name = "text";
  Change2(p1);
  Console.WriteLine("Change={0},Change={1}",name,p1.Name);
  Console.Read();
   
  }
  static void Change(string name)
  {
  name = "改变";
  }
  static void Change2(Person c1)
  {
   
  c1.Name = "改变";
  }  
  }

   
  class Person
  {
  private string name;

  public string Name
  {
  get { return name; }
  set { name = value; }
  }

  private int age;

  public int Age
  {
  get { return age; }
  set { age = value; }
  }
  }
//输出值为:
Change=text,Change1=改变

我看到C#图解教程里面都说过:
name和Person 都是引用类型,而在传入方法时,都是进行了值传递
但是同样是引用类型,为什么返回的结果不一样呢?

------解决方案--------------------
因为 Change2方法中传递的是Person对象
------解决方案--------------------
String 虽然是引用类型 不过是不可变的
对字符串做一些操作 比如大小写的转换 += 实际上是重新创建了一个字符串
这也是为什么在做大量字符串拼接的时候要使用StringBuilder 而不用+=