值类型 与 引用类型 的区别
和上一篇一样,先做一道题,检测一下自己的基本功
static void Main(string[] args) { User user1 = new User { Name = "zjf", Age = 24 }; int age = user1.Age; user1.Age = 25; string name = user1.Name; user1.Name = "ljy"; User user2 = new User { Name = "zjf", Age = 24 }; User user = user2; user.Name = "ljy"; user.Age = 25; Console.WriteLine("age=" + age); Console.WriteLine("user1.Age=" + user1.Age); Console.WriteLine("name=" + name); Console.WriteLine("user1.Name=" + user1.Name); Console.WriteLine(); Console.WriteLine("user2.Name="+user2.Name); Console.WriteLine("user2.Age="+user2.Age); Console.ReadLine(); } public class User { public string Name { get; set; } public int Age { get; set; } }
上面的代码,输出的结果是什么?
正确答案
24 25 zjf ljy ljy 25
如果你做对了,应该就很清楚 值类型 与 引用类型的区别了,就可以不看了(为了加深看一下也是可以的),如果错了,就要认真看了。
先介绍一下C#当中,哪个类型属于值类型,哪个属于引用类型,下面的图片来源于
从概念上看,值类型直接存储其值,而引用类型存储对其值的引用。
从内存空间上看,值类型是在栈中操作,而引用类型则在堆中分配存储单元。栈在编译的时候就分配好内存空间,在代码中有栈的明确定义,而堆是程序运行中动态分配的内存空间,可以根据程序的运行情况动态地分配内存的大小。 这两条参考
同时还参考如下文章
http://zhidao.baidu.com/question/429622136.html?fr=fd
http://www.cnblogs.com/coolbeibei/archive/2009/03/23/1419706.html
http://space.itpub.net/12639172/viewspace-501584
http://blog.csdn.net/tongyiyi/article/details/4029471