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 都是引用类型,而在传入方法时,都是进行了值传递
但是同样是引用类型,为什么返回的结果不一样呢?
{
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 都是引用类型,而在传入方法时,都是进行了值传递
但是同样是引用类型,为什么返回的结果不一样呢?
Person是引用类型
对字符串做一些操作 比如大小写的转换 += 实际上是重新创建了一个字符串
这也是为什么在做大量字符串拼接的时候要使用StringBuilder 而不用+=
谢谢,因为看书上的说明:string为引用类型,所以一直不是很明白这个误区,原来String是披着引用类型的外衣干着值类型的事情。thanks ^_^