概要

本篇文章主要简单扼要的讲述值类型和引用类型更进阶的理解和使用。如果希望更多的了解和技术讨论请记得看文章末尾,望各位看官多多支持多多关注,关注和支持是我更新文章的最大动力。在这里谢谢大家。温馨提示:通篇阅读大约10分钟,后续会以一个系列方式来讲解望大家持续关注,会附上运行代码来证实理论。

内容简介

值类型和应用类型的区别

主要内容

值类型

  • 值类型分配在线程栈中。
  • 值类型传递的是值的本身,对值类型变量的操作不可能影响另外一个值类型的值。
  • 值类型值类型对象有两种表现形式:装箱和未装箱。
  • 值类型从System.ValueType派生。该类型提供了与System.Object相同的方法。但是System.ValueType重写了Equlas方法,能在两个对象的字段值完全匹配的前提下返回true。也重写了GetHashCode方法。生成哈希码是,这个重写方法所用的算法会将对象实例字段中的值考虑在内。
  • 值类型变量赋值给另一个值类型变量,会逐字段的复制。
  • 未装箱的值类型,不在被使用时为它分配的存储空间会被自动释放,而不是等待GC回收。
  • 值类型不能作为积累性来定义,新的值类型或者新的引用类型,所以不能引入任何新的虚方法。所有方法都不能是抽象的,所有方法都是隐式密封不可重写。
  • 由于值类型从System.ValueType派生的,是没有同步索引块和对象指针的,所以在内存占用上比引用类型小。操作速度比引用类型快。

引用类型

  • 引用类型分配在托管堆中。
  • 引用类型传递的是值的副本,两个或多个引用类型变量能引用堆中的同一个对象,所以对一个变量执行操作时可能影响另一个变量的值。
  • 引用类型总是处于已装箱形式。
  • 引用类型变量赋值给另一个引用类型变量,只复制内存地址。
  • 引用类型可作为基类型,派生出其他派生类。
  • 引用类型从System.Objectt派生的是有同步索引块和对象指针的,什么是同步索引块呢,在使用lock中大家都会new一个object对象所以lock的对象而就是因为有同步索引块而且空的objcet对象结构稳定不会发生变化所以lock才能发挥作用。那什么是对象指针呢,对象指针就是编译器告诉你现在用的是什么对象具体体现在引用类型的GetType()方法,实质上就是调用对象指针拿到对象类型。

结尾

到这里大致我们对值类型和应用类型的区别有个初步的认识,后面的文章中将会逐渐加深讲解并写Demo项目以供大家学习。 希望大家多多支持关注,不胜感激。

  • E-Mail:zhuzhen723723@outlook.com
  • QQ: 580749909
  • Blog: https://www.cnblogs.com/justzhuzhu/
  • Git: https://github.com/JusterZhu
  • 知乎:https://www.zhihu.com/people/juster-zhu
  • 微信公众号

c#值类型引用类型第一章的更多相关文章

  1. 数往知来C#之接口 值类型与引用类型 静态非静态 异常处理 GC垃圾回收 值类型引用类型内存分配<四>

    C# 基础接口篇 一.多态复习 使用个new来实现,使用virtual与override    -->new隐藏父类方法 根据当前类型,电泳对应的方法(成员)    -->override ...

  2. 30天C#基础巩固-----值类型/引用类型,泛型,空合并操作符(??),匿名方法

    一:值类型/引用类型的区别      值类型主要包括简单类型,枚举类型,和结构体类型等,值类型的实例通常被分配在线程堆栈上面变量保存的内容是实例数据本身.引用类型被分配在托管堆上,变量保存的是地址.引 ...

  3. 6个重要的.NET概念:栈,堆,值类型,引用类型,装箱,拆箱

    引言 本篇文章主要介绍.NET中6个重要的概念:栈,堆,值类型,引用类型,装箱,拆箱.文章开始介绍当你声明一个变量时,编译器内部发生了什么,然后介绍两个重要的概念:栈和堆:最后介绍值类型和引用类型,并 ...

  4. [No0000136]6个重要的.NET概念:栈,堆,值类型,引用类型,装箱,拆箱

    引言 本篇文章主要介绍.NET中6个重要的概念:栈,堆,值类型,引用类型,装箱,拆箱.文章开始介绍当你声明一个变量时,编译器内部发生了什么,然后介绍两个重要的概念:栈和堆:最后介绍值类型和引用类型,并 ...

  5. JAVASCRIPT数据类型(值类型-引用类型-类型总览)

    值类型:也称为原始数据或原始值(primitive value). 这类值存储在栈(stack)中,栈是内存中一种特殊的数据结构,也称为线性表,栈按照后进先出的原则存储数据,先进入的数据被压入栈底,最 ...

  6. C#【堆与栈 值类型 引用类型】

    先说C#中值类型和引用类型 概念: 1.值类型:数据存储在内存的堆栈中,从堆栈中可以快速地访问这些数据,因此,值类型表示实际的数据. 2.引用类型:表示指向存储在内存堆中的数据的指针或引用(包括类.接 ...

  7. 深入C#内存管理来分析值类型&引用类型,装箱&拆箱,堆栈几个概念组合之间的区别

    C#初学者经常被问的几道辨析题,值类型与引用类型,装箱与拆箱,堆栈,这几个概念组合之间区别,看完此篇应该可以解惑. 俗话说,用思想编程的是文艺程序猿,用经验编程的是普通程序猿,用复制粘贴编程的是2B程 ...

  8. C# 语法二 值类型引用类型

    1.值类型 2.引用类型 一 值类型 值类型存放在栈中,引用类型存放在堆中. 值类型有:数值.布尔.字符,例如:int i;bool i2;char cr='a'; 二 引用类型 大多数类型是引用类型 ...

  9. JavaScript:值类型 引用类型

    JavaScript类型 (1)值类型:数值.布尔值.null.undefined. (2)引用类型:对象.数组.函数.  1.string var str="hongda"; v ...

随机推荐

  1. C/C++编程笔记:C++入门知识丨从结构到类的演变

    先来看看本节知识的结构图吧! 接下来我们就逐步来看一下所有的知识点: 结构的演化 C++中的类是从结构演变而来的, 所以我们可以称C++为”带类的C”. 结构发生质的演变 C++结构中可以定义函数, ...

  2. 剑指 Offer 57. 和为s的两个数字

    本题 题目链接 题目描述 我的题解 双指针 思路分析 因为该数组是递增数组,所以我们可以用双指针法. 声明指针left 和 right分别指向数组的头(数组下标为0)和尾(数组下标为length-1) ...

  3. day13. 迭代器与高阶函数

    一.迭代器 """ 能被next调用,并不断返回下一个值的对象,叫做迭代器(对象) 概念: 迭代器指的是迭代取值的工具,迭代是一个重复的过程,每次重复都是基于上一次的结果 ...

  4. ArrayList源码解析,老哥,来一起复习一哈?

    前言 JDK源码解析系列文章,都是基于JDK8分析的,虽然JDK14已经出来,但是JDK8我还不会,我... 类图 实现了RandomAccess接口,可以随机访问 实现了Cloneable接口,可以 ...

  5. MySQL--->高级对象

    本章目标: 掌握MySQL视图 掌握MySQL存储过程 掌握MySQL触发器 1.视图: 视图就是一条select语句执行后返回的结果集. 使用场景:权限控制的时候不希望用户访问表中某些敏感信息的列 ...

  6. ACL权限管理 学习

    #查看权限 getfacl 文件名 例子:getfacl test 结果:# file: test# owner: root# group: rootuser::rw-group::r-xother: ...

  7. XCTF-WEB-高手进阶区-upload1-笔记

    这道题摸索着弄出了两种解法 思路大体都是跳过前端的后缀名过滤从而达到上传一句话木马的目的,之后使用菜刀&蚁剑来进行链接获取Flag <script type="text/jav ...

  8. 你可以 CRUD,但你不是 CRUD 程序员!

    什么是务实 务实程序员他们总是在面临问题时,透过问题看到本质,从具体的场景出发,从大局着想,了解整个问题的来龙去脉,他们会对自己的行为负责,在项目面临问题时,他们不会撒手不管或者任由风险一步步扩大直至 ...

  9. Socket 由浅入深,开发一个真正的通信应用

    在说socket之前.我们先了解下相关的网络知识: 端口  在Internet上有很多这样的主机,这些主机一般运行了多个服务软件,同时提供几种服务.每种服务都打开一个Socket,并绑定到一个端口上, ...

  10. C#LeetCode刷题-哈希表

    哈希表篇 # 题名 刷题 通过率 难度 1 两数之和 C#LeetCode刷题之#1-两数之和(Two Sum) 42.8% 简单 3 无重复字符的最长子串   24.2% 中等 18 四数之和   ...