c#值类型引用类型第一章
概要
本篇文章主要简单扼要的讲述值类型和引用类型更进阶的理解和使用。如果希望更多的了解和技术讨论请记得看文章末尾,望各位看官多多支持多多关注,关注和支持是我更新文章的最大动力。在这里谢谢大家。温馨提示:通篇阅读大约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#值类型引用类型第一章的更多相关文章
- 数往知来C#之接口 值类型与引用类型 静态非静态 异常处理 GC垃圾回收 值类型引用类型内存分配<四>
C# 基础接口篇 一.多态复习 使用个new来实现,使用virtual与override -->new隐藏父类方法 根据当前类型,电泳对应的方法(成员) -->override ...
- 30天C#基础巩固-----值类型/引用类型,泛型,空合并操作符(??),匿名方法
一:值类型/引用类型的区别 值类型主要包括简单类型,枚举类型,和结构体类型等,值类型的实例通常被分配在线程堆栈上面变量保存的内容是实例数据本身.引用类型被分配在托管堆上,变量保存的是地址.引 ...
- 6个重要的.NET概念:栈,堆,值类型,引用类型,装箱,拆箱
引言 本篇文章主要介绍.NET中6个重要的概念:栈,堆,值类型,引用类型,装箱,拆箱.文章开始介绍当你声明一个变量时,编译器内部发生了什么,然后介绍两个重要的概念:栈和堆:最后介绍值类型和引用类型,并 ...
- [No0000136]6个重要的.NET概念:栈,堆,值类型,引用类型,装箱,拆箱
引言 本篇文章主要介绍.NET中6个重要的概念:栈,堆,值类型,引用类型,装箱,拆箱.文章开始介绍当你声明一个变量时,编译器内部发生了什么,然后介绍两个重要的概念:栈和堆:最后介绍值类型和引用类型,并 ...
- JAVASCRIPT数据类型(值类型-引用类型-类型总览)
值类型:也称为原始数据或原始值(primitive value). 这类值存储在栈(stack)中,栈是内存中一种特殊的数据结构,也称为线性表,栈按照后进先出的原则存储数据,先进入的数据被压入栈底,最 ...
- C#【堆与栈 值类型 引用类型】
先说C#中值类型和引用类型 概念: 1.值类型:数据存储在内存的堆栈中,从堆栈中可以快速地访问这些数据,因此,值类型表示实际的数据. 2.引用类型:表示指向存储在内存堆中的数据的指针或引用(包括类.接 ...
- 深入C#内存管理来分析值类型&引用类型,装箱&拆箱,堆栈几个概念组合之间的区别
C#初学者经常被问的几道辨析题,值类型与引用类型,装箱与拆箱,堆栈,这几个概念组合之间区别,看完此篇应该可以解惑. 俗话说,用思想编程的是文艺程序猿,用经验编程的是普通程序猿,用复制粘贴编程的是2B程 ...
- C# 语法二 值类型引用类型
1.值类型 2.引用类型 一 值类型 值类型存放在栈中,引用类型存放在堆中. 值类型有:数值.布尔.字符,例如:int i;bool i2;char cr='a'; 二 引用类型 大多数类型是引用类型 ...
- JavaScript:值类型 引用类型
JavaScript类型 (1)值类型:数值.布尔值.null.undefined. (2)引用类型:对象.数组.函数. 1.string var str="hongda"; v ...
随机推荐
- PHP imageantialias - 是否使用抗锯齿(antialias)功能
imageantialias — 是否使用抗锯齿(antialias)功能.高佣联盟 www.cgewang.com 语法 bool imageantialias ( resource $image ...
- AGC 043 C - Giant Graph SG函数 dp 贪心
LINK:Giant Graph 神仙题目. 容易发现在图中选择某个点的贡献为\(10^{18\cdot(x+y+z)}\) 这等价于多选一个点多大一点就多乘了一个\(10^{18}\) 所以显然是贪 ...
- CF EC 87 div2 1354 C2 Not So Simple Polygon Embedding 计算几何 结论
LINK:Not So Simple Polygon Embedding 搞了好久终于搞会了. 错误原因 没找到合适算边长的方法 要么就是边长算的时候算错了. 几何学的太差了 最后虽然把十边形的和六边 ...
- 关于c/c++中的二维数组与指针
设a是一个一维数组的数组名,则a表示其第一个元素的地址(即&a[0]),而&a表示整个数组的地址!尽管两者值相同(&a[0]==&a),因此&a是地址,*(&a ...
- SSH整合-hibernate
<property name="hibernate.dialect">org.hibernate.dialect.MySQL5Dialect</property& ...
- PHP+Redis链表解决高并发下商品超卖问题
目录 实现原理 实现步骤 上一篇文章聊了一下使用Redis事务来解决高并发商品超卖问题,今天我们来聊一下使用Redis链表来解决高并发商品超卖问题. 实现原理 使用redis链表来做,因为pop操作是 ...
- Linux 文件IO简单实例
目录 简述 代码 编译运行 简述 Linux下的所有资源都被抽象为文件,所以对所有资源的访问都是以设备文件的形式访问,设备文件的操作主要包括:打开.关闭.读.写.控制.修改属性等.下面的示例代码主要是 ...
- Linux输出缓存你知道多大吗?
今天看到这个代码很简单,就是验证一下Linux系统的输出缓存大小.当 猜一下这个代码的输出: #include <stdio.h> #include <string.h> #i ...
- 面经手册 · 第2篇《数据结构,HashCode为什么使用31作为乘数?》
作者:小傅哥 博客:https://bugstack.cn 沉淀.分享.成长,让自己和他人都能有所收获! 一.前言 在面经手册的前两篇介绍了<面试官都问我啥>和<认知自己的技术栈盲区 ...
- Python笔试——毕业旅行问题
毕业旅行问题 小明目前在做一份毕业旅行的规划.打算从北京出发,分别去若干个城市,然后再回到北京,每个城市之间均乘坐高铁,且每个城市只去一次.由于经费有限,希望能够通过合理的路线安排尽可能的省一些路上的 ...