不用说,当一个函数的参数是值类型的时候,.net会copy一个同样的参数作为局部变量。而引用类型呢。让我们做个试验
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace ConsoleApplication1
{
class Person
{
public string username
{
get;
set;
}
public string password
{
get;
set;
}
public int age
{
get;
set;
}
}
}
新建一个类
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
Person p = new Person();
p.username = "zhan";
//play(p);
Console.WriteLine("密码是" + p.password + " 年龄是" + p.age);
Console.Read();
}
static void play(Person pp)
{
pp.password ="123";
pp.age = 15;
}
}
}
然后我们在主函数调用这个类,很显然把函数play注释掉的时候输出是
、
而不注释掉
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
Person p = new Person();
p.username = "zhan";
play(p);
Console.WriteLine("密码是" + p.password + " 年龄是" + p.age);
Console.Read();
}
static void play(Person pp)
{
pp.password ="123";
pp.age = 15;
}
}
}
结果则是
这充分说明了引用类型做局部变量的时候是潜复制,复制的改对象的一个引用,指向的是堆空间的同一块区域。跟值类型的ref有异曲同工之秒。