我们知道 引用类型与值类型是C#中两个重要的概念,平时也会经常遇到。下面来简单阐述一下二者的区别。首先 值类型是在栈区存储,而引用类型则是在堆区存储。
一般值类型是直接存储变量值,而引用类型则是存储变量的引用(地址)。
值类型包括 :int char 等这种简单类型,
引用类型包括:接口 委托 string类型等
其中,值类型传递的是值的拷贝,引用类型传递的是值的引用(值的地址);
class Program
{
static void Main(string[] args)
{
Person yaohongbo = new Person() { Name = "姚宏波", Age = 29 };
Person lilei = new Person() { Name = "李雷", Age = 22 };
int age = yaohongbo.Age;
yaohongbo.Age = 27;
Person zhangsan = lilei;
lilei.Name = "李磊";
Console.WriteLine("yaohongbo的age:"+yaohongbo.Age);
Console.WriteLine("age:" + age);
Console.WriteLine("lilei的name:" + lilei.Name);
Console.WriteLine("zhangsan的name:" + zhangsan.Name);
Console.ReadKey();
}
}
class Person
{
public string Name { get; set; }//引用类型
public int Age { get; set; }//值类型
}
执行结果为
参考:http://www.cnblogs.com/wenriyao/p/3952163.html
我们分析代码:
yaohongbo.Age是int类型,为值类型,所以int age=yaohongbo.Age 是复制值拷贝到另外一个内存区;
而person zhangsan = lilei; lilei.Name = "李磊";中,由于person为自定义的引用类型,引用传的是地址,
则zhangsan 也指向了lilei这一块内存区域,如果改变zhangsan内变量的值,lilei也会相应变化;
内存图如下: