值类型与引用类型分这几种情况:

1.内存分为堆和栈,值类型的数据存储在栈中,引用类型的数据存储在堆中。

2.int numb=10,代码中的10是值类型的数据,numb只是一个指向10的变量而已。其中10存储在栈中,变量numb也存储在栈中。

3.Person p=new Person(),代码中 new Person()所创建的对象存储在堆中,变量p存储在栈中。

4.综合第2点和第3点所有变量都存储在栈中,无论此变量存储的值是值类型和引用类型。

5.值类型包括枚举,结构以及像int,datetime这样的简单类型;引用类型包括类,接口,委托等。

6.值类型传递的值的拷贝,引用类型传递的是值的引用,即此数据在内存中的地址,这是最核心的概念,实例展示:

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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 { getset; }//引用类型
            public int Age { getset; }//值类型
        }

输出结果如下图:

代码说明:yaohongbo.Age是int类型,为值类型,所以代码int age=yaohongbo.Age,是将yaohongbo.Age变量存储的值复制了一份,然后让变量age存储这份拷贝,此拷贝和yaohongbo.Age无任何关系,所以我们才可以看到上面的输出结果。

再看代码:

 
 
Person zhangsan = lilei;
              lilei.Name = "李磊";

Person为自定义类,为引用类型,而引用类型穿的是引用,变量zhangsan指向的数据和变量lilei是同一个内存地址,即同一个对象,而不是像值类型那样,拷贝了一份变量lilei指向的数据给变量zhangsan。所以才会出现无论更改zhangsan韩式lilei的属性值,其他一个都会改变的情况。

最后通过一张图来描述上面代码。

C# 值类型与引用类型的详解的更多相关文章

  1. 【转】C#详解值类型和引用类型区别

    通用类型系统 值类型 引用类型 值类型和引用类型在内存中的部署 1 数组 2 类型嵌套 辨明值类型和引用类型的使用场合 5 值类型和引用类型的区别小结   首先,什么是值类型,什么是引用类型? 在C# ...

  2. 值类型和引用类型的区别,struct和class的区别

    C#值类型和引用类型 1.简单比较 值类型的变量直接存储数据,而引用类型的变量持有的是数据的引用,数据存储在数据堆中. 值类型(value type):byte,short,int,long,floa ...

  3. Java中只有值传递,(及值传递与引用传递详解)

    首先呢,我们来说一下值传递与引用传递的区别(这两个玩意儿实在调用函数的时候提到的) 比如说 code( a) code( int a ) code(a)是调用函数,a是我们原本函数的一个值类型,然后使 ...

  4. Go语言中的值类型和引用类型

    一.值类型和引用类型值类型:int.float.bool和string这些类型都属于值类型,使用这些类型的变量直接指向存在内存中的值,值类型的变量的值存储在栈中.当使用等号=将一个变量的值赋给另一个变 ...

  5. C# - 值类型、引用类型&走出误区,容易错误的说法

    1. 值类型与引用类型小总结 1)对于引用类型的表达式(如一个变量),它的值是一个引用,而非对象. 2)引用就像URL,是允许你访问真实信息的一小片数据. 3)对于值类型的表达式,它的值是实际的数据. ...

  6. PHP7中标量类型declare的用法详解

    这篇文章主要介绍了PHP7标量类型declare用法,结合实例形式分析了PHP7中标量类型declare的功能.特性与相关使用技巧,需要的朋友可以参考下 本文实例讲述了PHP7标量类型declare用 ...

  7. 【译】.NET中六个重要的概念:栈、堆、值类型、引用类型、装箱和拆箱

    为何要翻译 一来是为了感受国外优秀技术社区知名博主的高质量文章,二来是为了复习对.NET技术的基础拾遗达到温故知新的效果,最后也是为了锻炼一下自己的英文读写能力.因为是首次翻译英文文章(哎,原谅我这个 ...

  8. 图解C#的值类型,引用类型,栈,堆,ref,out

    C# 的类型系统可分为两种类型,一是值类型,一是引用类型,这个每个C#程序员都了解.还有托管堆,栈,ref,out等等概念也是每个C#程序员都会接触到的概念,也是C#程序员面试经常考到的知识,随便搜搜 ...

  9. c# 我所理解的 值类型 and 引用类型

    一直以来对于值类型和引用类型都只是一个模糊的概念,趁最近有空深入理解了下. 先说说值类型,在msdn上是这样介绍值类型的. 意思就是值类型直接包含值. 变量引用的位置就是值所在内存中实际存储的位置,所 ...

随机推荐

  1. Nginx 的总结

    目录 Nginx 的产生 Nginx 的用武之地 Web 服务器对比 Nginx 的产生 Nginx 同 Apache 一样都是一种 Web 服务器.基于 REST 架构风格,以统一资源描述符(Uni ...

  2. cx_Oracle python模块安装

    1. 需要从oracle网站下载一下两个包 instantclient-basic-linux.x64-11.2.0.4.0.zip instantclient-sdk-linux.x64-11.2. ...

  3. POJ 2018 Best Cow Fences (二分答案构造新权值 or 斜率优化)

    $ POJ~2018~Best~Cow~ Fences $(二分答案构造新权值) $ solution: $ 题目大意: 给定正整数数列 $ A $ ,求一个平均数最大的长度不小于 $ L $ 的子段 ...

  4. Django的下载和基本指令

    1.下载Django pip3  install  django     #不写版本号的话,默认使下载最新版的django pip3  install   django == 2.1.2    #指定 ...

  5. 032:DTL常用过滤器(1)

    为什么需要过滤器: 在DTL中,不支持函数的调用形式‘()’,因此不能给函数传递参数,这将有很大的局限性:而过滤器其实就是一个函数,可以对需要处理的参数进行处理,并且还可以额外接受一个参数(也就是说: ...

  6. dubbo、web应用 项目结构以及发布目录结构

    一.dubbo服务项目结构及发布结构 dubbo 服务项目结构 xxxxx-api 接口类和一些DTO 用于供其他项目依赖 需要提供dubbo服务的接口命名 以Facade结尾 (xxxxxFacad ...

  7. Linux学习-MySQL的主从复制高可用性解决方案MHA

    一.MHA简介 1.MHA Master High Availability,对主节点进行监控,可实现自动故障转移至其它从节点:通过提升某一从节点为新的主节点,基于主从复制实现,还需要客户端配合实现, ...

  8. yolo v3 loss=nan, Avg loss=nan的一种原因

    我这里是由于数据整理错误导致的,同一标注区域重复2次送入模型,具体如下: 0.798046875 0.5555555555555556 0.04296875 0.03611111111111111 0 ...

  9. 重置Jenkins的构建历史

    1.重置单个JOB的构建历史item = Jenkins.instance.getItemByFullName("your-job-name-here") //THIS WILL ...

  10. [CSP-S模拟测试]:任(duty)(二维前缀和)

    题目描述 $liu\_runda$退役之后就失去梦想开始咸鱼生活了……$Bilibili$夏日画板活动中,所有人都可以在一块画板上进行像素画创作.$UOJ$群有一群无聊的人决定在画板上创作一个$50\ ...