C#基础3-值类型与引用类型、装箱与拆箱

本文深入介绍了C#的类型系统,包括强类型、值类型与引用类型的区别,以及它们在内存中的存储位置。讨论了装箱和拆箱的概念,以及类型转换的方法。此外,还涵盖了常用的容器类如ArrayList和List<T>,并解析了ref和out参数在函数调用中的作用。最后,分析了for、foreach循环的内存消耗情况,并提醒了在遍历过程中避免删除元素的注意事项。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

推荐学习 B 站找的刘铁锰老师老师的 C# 入门视频

类型

C# 是强类型静态语言,声明变量时需要确定变量的类型,程序经过编译器编译后运行

类型 决定了
变量在内存中占用的空间大小,进而确定了
变量的取值范围,例如 sbyte 表示有符号的 一字节大小( 8 位二进制位)的整数,取值范围为 -128 至 127

取值范围可参考

确定了类型的继承关系 类型 类型还会影响程序运行时,变量存储在堆区还是栈区;变量可以使用哪些操作符 += -= 操作符等

值类型

简单值类型–整数类型 、字符类型、实数类型、布尔类型

复合值类型–结构体类型 、枚举类型

值类型 与 引用类型的区别

  1. 值类型变量存储在栈中,直接在栈中存放变量对应的数据;引用类型变量存储在栈中,变量对应的数据表示为堆中的某个地址,这个地址代表的堆空间存放的,才是引用对象的数据。
  2. 值类型存取速度快,引用类型存取速度慢。
  3. 值类型变量表示实际数据,引用类型变量则表示指向存储在堆中的数据的指针或引用。
  4. 栈的内存是自动释放的,堆内存是由 .NET GC 自动释放。
  5. 值类型继承自 System.ValueType , 引用类型继承自 System.Object。

装箱和拆箱

装箱是将值类型转换为 object 类型或由此值类型实现的任何接口类型的过程

装箱:把值类型变量转化为引用类型变量

拆箱:把引用类型变量转化为值类型变量

类型转换

  1. (int)1.2f
  2. int.Parse()
  3. var m = o as Mammal;
  4. Convert.ToString(value, baseValue)

常用容器类

ArrayList 可变长度的数组

List<T> 泛型链表 访问速度快,修改速度慢

HashTable/Dictionary 散列表/字典格式 查询效率高 空间占用较大

Stack 栈 后进先出

Queue 队列 先进先出

ref 和 out 的区别

ref 和 out 可以使函数有多个返回的值

两个关键字都是修饰函数的参数,表示函数形参传递时进行的是引用传递而不是值拷贝,其中 out 传递的引用只为带回返回值,不需要事先声明变量

for forEach enumerator.MoveNext 循环的内存消耗情况

for 循环可以通过索引依次进行遍历,foreach 和 Enumerator.MoveNext 通过迭代的方式进行遍历,内存消耗上本质上并没有太大的区别

注意:使用 forEach 循环时不能删除正在遍历的元素,可以在遍历完后,删除对应索引或 key 的元素

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值