网站首页 > 技术文章 正文
C#中的数据类型分为两种:值类型和引用类型
1、值类型包含:byte、sbyte、char、short、ushort、int、uint、long、ulong、decimal、float、double、bool、enum、struct
2、基于值类型的变量直接包含值。将一个值类型的变量赋值给另一个值类型,将赋值包含的值。这与引用类型变量的赋值不同,引用类型
变量的复制只复制对变量的引用,而不复制对象本身。所有的值类型均隐性派生自System.ValueType。
3、值类型存储在堆栈(stack)中,如:int a = 10 在堆栈中存储了a的值10。
引用类型的变量在声明后保存在堆栈(stack)中,在堆栈中固定占用4个字节,用于存放对象的地址。在使用new关键字创建对象后,由
.Net在内存堆(heap)中为其分配相应的内存空间,并将该对象的首地址存储在应用类型的变量中。例如:ClassOne one = new ClassOne()
.Net在内存堆(heap)中为one分配了相应的物理内存,假如其首地址为1000,则在堆栈(stack)中变量one存储的one的首地址1000
4、与引用类型不同,值类型不可派生出新的类型。但与引用类型相同的是结构也可以实现接口。值类型不可包含Null值,然而可空类型功能允许将null赋给值类型
5、例:
int a = 10
int b = a
ClassOne one = new ClassOne()
ClassTwo two = one
则在堆栈中为变量b分配4个字节的空间,并且将变量a的值10复制给变量b,此时变量a和变量b中各保留10的一个备份,对a的修改不会影响b,同样修改b的值也不会影响a。
然后在堆栈中为two分配4个字节的空间,并且将变量one的值复制给two,由于one中存储的是one对象的首地址1000,因此复制后two中保存的也是one对象的首
地址1000,因此,此时one和two变量都保存了同一个对象的首地址,即他们两个指向同一个对象。
猜你喜欢
- 2024-11-12 C#-练习题 014(c#程序题及答案)
- 2024-11-12 C# 类型转换(c类型转换有哪三种形式)
- 2024-11-12 C#-无参数有返回值的方法 060(有参无返回值 c语言)
- 2024-11-12 abelkhan中的rpc框架(rpc框架应用场景)
- 2024-11-12 C#编程零基础到入门学习-C# 值类型和引用类型(4-8)
- 2024-11-12 2.6 C#的常用关键字和预定义类型(c#预留关键字)
- 2024-11-12 C#_图片拖拽(c#窗体图片移动)
- 2024-11-12 数据类型 - C#入门教程(c#常见数据类型)
- 2024-11-12 C#中堆栈(Stack)和堆(Heap)的区别——第一部分
- 2024-11-12 C#编写的WINCC控件如何读取变量值
- 最近发表
- 标签列表
-
- cmd/c (57)
- c++中::是什么意思 (57)
- sqlset (59)
- ps可以打开pdf格式吗 (58)
- phprequire_once (61)
- localstorage.removeitem (74)
- routermode (59)
- vector线程安全吗 (70)
- & (66)
- java (73)
- org.redisson (64)
- log.warn (60)
- cannotinstantiatethetype (62)
- js数组插入 (83)
- resttemplateokhttp (59)
- gormwherein (64)
- linux删除一个文件夹 (65)
- mac安装java (72)
- reader.onload (61)
- outofmemoryerror是什么意思 (64)
- flask文件上传 (63)
- eacces (67)
- 查看mysql是否启动 (70)
- java是值传递还是引用传递 (58)
- 无效的列索引 (74)