值类型 与 引用类型 的区别

目录 

和上一篇一样,先做一道题,检测一下自己的基本功

 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

原文地址:https://www.cnblogs.com/Fengger/p/2587011.html