值类型和引用类型

C#的数据类型有三大类:

1、数值类型

2、引用类型

3、指针类型(仅用于非安全代码)

数值类型--直接派生于System.ValueType

1.结构类型(struct)

1.简单类型

 1.整值型

整型(byte--System.Byte,sbyte--System.SByte,

long--System.Int64,ulong--System.Int64,

short--System.Int16,ushort--System.Int16,

int--System.Int32,uint--System.Int32)

浮点型 (float--System.Single,double--System.Double)

十进制型(decimal)--System.Decimal

 2.字符类型(char)--System.Char

 3.布尔类型(bool)--System.Boolean

2.用户自定义结构类型

2.枚举类型(enum)--派生于System.Enum

3.可空类型--派生于System.Nullable泛型结构体

特性:
1.C#的所有值类型均隐式派生自System.ValueType。
2.每种值类型均有一个隐式的默认构造函数来初始化该类型的默认值。
3.所有的值类型都是密封(seal)的,所以无法派生出新的值类型。
4.值类型的实例通常是在线程栈上分配的(静态分配),但是在某些情形下可以存储在堆中。

引用类型--隐式派生自System.object

1.类

用户自定义的类(class)

object基类

字符串类(string)--System.String

2.接口(interface)--接口不是一个“东西”,所以不存在派生于何处的问题

3.数组(array)--System.Array

4.委托-代理(delegate)--System.Delegate)

特性:
1.C#的所有引用类型均隐式派生自System.object。
2.引用类型可以派生出新的类型。
3.引用类型可以包含null值。
4.引用类型变量的赋值只复制对对象的引用,而不复制对象本身。
5.引用类型的对象总是在进程堆中分配(动态分配)。

总结:

1.所有继承System.Value的类型都是值类型,其他类型都是引用类型。
2.引用类型可以包含null值,值类型不能(可空类型功能允许将 null 赋给值类型);
3.引用类型变量的赋值只复制对对象的引用,而不复制对象本身。而将一个值类型变量赋给另一个值类型变量时,将复制包含的值。
4.当比较两个值类型时,进行的是内容比较;而比较两个引用类型时,进行的是引用比较。
5.值类型在内存管理方面具有更好的效率,并且不支持多态,适合用作存储数据的载体;引用类型支持多态,适合用于定义应用程序的行为。
6.数组类型是一族类型,它们都继承System.Array,而System.Array继承自System.Object。所以所有的数组类型都是引用类型。数组的元素,不管是引用类型还是值类型,都存储在托管堆上。

值类型与引用类型的本质区别有以下几点:

1.内存分配: 值类型既可存储在堆中也可以存储在栈中,而引用类型是存储在托管堆上。值类型直接从堆栈中里面取值,而引用类型必须要先从堆栈里面取出它的地址,再根据这个地址在堆里找到对应的值。
2.效     率: 值类型效率高,不需要地址转换;引用类型效率较低,需要进行地址转换。
3.内存回收: 值类型使用完后立即回收;引用类型使用完后不立即回收,而是交给GC处理回收。
4.赋值操作: 值类型是创建一个新对象;引用类型创建一个引用。
5.类型扩展: 值类型不易扩展,所有值类型都是密封(seal)的,所以无法派生出新的值类型;引用类型可以派生出新的类型,具有多态的特性,方便扩展。

 

转载于:https://www.cnblogs.com/LoveSuk/p/6633361.html

【问题解析】Matlab Function的易错点(Variable Size) Matlab Function的易错点 阅读详情

相关推荐

手把手教你用PLECS仿真BUCK数字电源(含DSP代码实现)

本文详细介绍了如何利用PLECS仿真软件与Visual Studio 2022搭建高保真数字电源开发环境,手把手指导从BUCK电路建模、编写硬件感知的C控制算法到参数调优的全过程。重点阐述了通过DLL接口实现软件在环仿真,模拟DSP的ADC/PWM时序,并将验证后的代码无缝迁移至TI C2000系列DSP,构建从仿真到固件的完整数字电源开发闭环,显著提升开发效率与一次成功率。

oo7890的博客 395

关于 “引用类型保存在堆上,值类型保存在栈上”是不准确的

关于 “引用类型保存在堆上,值类型保存在栈上”是不准确的 关于 堆栈 早期的理解是 内存的两块区域。 堆呢 速度快 但是 比较小。二栈呢 速度稍慢,但是空间比较大。 在早期 关于 说道 值类型 和 引用类型的时候 经常说 :值类型一般是在 堆里面,二引用类型则在 堆里面存放是的引用的地址,而真是的值 是在 栈里面!。 当时想着想着 又有哪里不对。 应为当类里面包含

唐僧的专栏 4622

EBOM转MBOM实战:华为云数字工厂如何5步搞定BOM自动转换(含避坑指南)

本文详细解析了华为云数字工厂平台如何通过五步自动化流程实现EBOM到MBOM的高效转换,涵盖模型预配置、逻辑流编排、工艺属性注入等关键步骤,并提供了多工厂差异化配置、历史数据迁移等典型场景的避坑指南。该方案显著提升转换效率,降低差错率,助力企业实现数字化转型。

weixin_29215391的博客 268

【C#基础】值类型和引用类型

在备战软考的过程中,涉及到了原型模式,其中讲到了在浅复制的过程中,值类型和引用类型是有区别的。那么究竟什么是值类型,什么是引用类型呢? 在理解这两个概念之前,我们先谈一谈栈和堆。

柠檬树 9943

Cosmos Transfer2.5多模态AI模型部署与优化实战

多模态AI技术通过融合文本、图像、代码等不同模态数据,实现跨模态理解与生成。其核心原理基于Transformer架构的注意力机制,结合对比学习实现模态对齐。这类技术在智能内容创作、跨模态搜索等领域具有重要价值,尤其适合电商营销图文生成、UI设计转代码等场景。Cosmos Transfer2.5作为先进的多模态模型,支持8192 tokens长文本窗口和混合模态输入,实测推理速度达17.5 samples/s(T4显卡)。部署时需注意FlashAttention优化可提升3倍长文本处理效率,8-bit量化则能

weixin_29038303的博客 280

【网络原理】HTTP 请求 (Request)详解

【网络原理】HTTP 请求 (Request)详解,认识URLquery string关于 URL encode, GET方法,POST 方法,GET 和 POST 的区别,User-Agent (简称 UA),Referer,Cookie

ZXT的博客 1万+

C# 值类型和引用类型的区别

文章目录内存中的存储方式二者区别的补充与总结 C# 的变量类型可以分为值类型和引用类型。 常见的值类型和引用类型可参考下面这个表格: 注:C# 的 struct 是值类型,这个很容易被忽略。 内存中的存储方式 值类型和引用类型最大的区别,就是它们在内存中的存储方式不同。 也许在很多地方你会看到这么一句话:值类型存储在栈中,引用类型存储在堆中。 实际上,这并不是严谨的说法。比较完整的说法应该是: 引用类型的变量在栈中分配,引用类型的实例在堆中分配(二段式)。相当于栈中存的是一个引用,这个引用指向了堆中具体

qq_46044366的博客 6161

基于IDEA与Mill构建Windows下的Chisel开发环境——香山处理器源码解析实战

本文详细指导如何在Windows系统下使用IDEA集成开发环境和Mill构建工具搭建Chisel开发环境,并以香山处理器源码为实战案例进行解析。内容涵盖环境准备、源码获取、工程构建、IDEA配置优化及代码阅读技巧,帮助开发者高效学习硬件设计语言。

a1b2c3d的博客 716

值类型和引用类型 是什么 区别

1、简单比较   值类型的变量直接存储数据,而引用类型的变量持有的是数据的引用,数据存储在数据堆中。   值类型(value type):byte,short,int,long,float,double,decimal,char,bool 和struct统称为值类型。值类型变量声明后,不管是否已经赋值,编译器为其分配内存。  引用类型(reference type):string和class统称为引用类型。当声明一个类时,只在栈中分配一小片内存用于容纳一个地址,而此时并没有...

软件工程小施同学 的专栏 1万+

编写一个程序实现顺序表的各种基本运算(假设顺序表的元数基本类型为Char)

/* *Copyright (c) 2016, 烟台大学计算机学院 *All rights reserved. *文件名称:main.cpp *作者:张旺华 *完成日期: 2016 年 7 月 1 日 *版本号:v1.0 *问题描述:编写一个程序实现顺序表的各种基本运算(假设顺序表的元数基本类型为Char) * */ #include #include #include

张旺华的博客 1万+

EndNote X9 参考文献附录列表 格式调整

EndNote X9 插入参考文献常见问题总结

程序员,他们想的是什么?他们想的永远都是技术,他们崇尚的也永远都是技术。 2569

[C#]值类型和引用类型

值类型和引用类型什么是值类型,什么是引用类型 什么是值类型,什么是引用类型 概念:值类型直接存储其值,而引用类型存储对其值的引用。部署:托管堆上部署了所有引用类型。 引用类型:基类为Objcet 值类型:均隐式派生自System.ValueType: 值类型: byte,short,int,long,float,double,decimal,char,bool 和 struct 统称为值类型。 引用类型: string 和 class统称为引用类型。 值类型变量声明后,不管是否已经赋值,编译器为其分配内存

德仔 1653

再不入坑就晚了,深度神经网络概念大整理,最简单的神经网络是什么样子?

再不入坑就晚了,深度神经网络概念大整理,最简单的神经网络是什么样子?

我是香菜 3万+

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

值类型(value type):byte,short,int,long,float,double,decimal,char,bool 和 struct 统称为值类型。 引用类型(reference type):string 和 class统称为引用类型。

欢迎指错||纠正||建议||水评+点赞&&评论&&关注&&转发 5832

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

值类型和引用类型的区别

似乎“值类型和引用类型的区别”是今年面试的流行趋势,我已然是连续三次(目前总共也就三次)面试第一个问题就遇到这个了,这是多大的概率啊,100%,哈哈,我该买彩票去! 言归正传,咱还是先来探讨探讨这二者之间有什么区别吧。记得有一次电话面试中,我直接跟面试官说:“值类型是现金,引用类型是存折”,后来想想当时说这话虽是有点儿冲动地脱口而出,但也没什么不妥。我这人不善于背理论的教条,喜欢把书本上那些生硬的话跟现实生活中常见的事物联系起来理解和记忆。 直白点儿说:值类型就是现金,要用直接用;引用类型是存折,要用还

5937

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

.NET的值类型和引用类型

先看下微软官方介绍: 如果数据类型在它自己的内存分配中存储数据,则该数据类型就是“值类型”。“引用类型”包含指向存储数据的其他内存位置的指针。 值类型 值类型包括: 所有数字数据类型 Boolean 、Char 和 Date 所有结构,即使其成员是引用类型 ...

weixin_34346099的博客 950

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

GO的值类型和引用类型

目录 1、值类型变量 2、引用类型 3、空白标识符 1、值类型变量 所有像 int、float、bool 和 string 这些基本类型都属于值类型,使用这些类型的变量直接指向存在内存中的值。 当使用等号 = 将一个变量的值赋值给另一个变量时,如:j = i,实际上是在内存中将 i 的值进行了拷贝 可以通过 &i 来获取变量 i 的内存地址,例如:0xc00000a0a0(每次的地址都可能不一样)。 package main import "fmt" func.

Zlwriii的博客 3860

值类型和引用类型的定义及区别

值类型和引用类型的定义及区别

qq_66312646的博客 2902

C# 值类型和引用类型

值类型和引用类型的区别 值类型存储在内存的栈当中。 引用类型存储在内存的堆当中。 值类型和引用类型的传递方式不同。 值类型和引用类型存储区别的图解: 常见的值类型:int,double,bool,char,decimal,struct,enum 常见的引用类型:string,自定义类 值传递和引用传递 ...

喵毛的博客 298

golang 值类型和引用类型

1.值类型和引用类型 package main import ( "fmt" ) func add(num int) { num += 1 } func addArry(arry [3]int){ arry[0] = 10 } func addSlice(slice []int){ slice[0] = 10 } func addMap(m map[int]int){ for k,v := range m{ v += 1 m[k] = v } } func main() {

qq_15115793的博客 958

引用类型和值类型之间有什么区别

引用类型和值类型之间的区别主要体现在以下几个方面:intfloatcharboolstructenumclassinterfacearraystringdelegateEquals。

lcfengokok的博客 625
上一篇: 面向对象设计的SOLID原则
下一篇: 数据库--中文表名及字段名的优缺点
Langzi_2014
博客等级 码龄12年 2粉丝 1原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值