40.CSharp中的值类型和引用类型
40.1 题目
C#中哪些变量类型是值类型(至少说出13种),哪些是引用类型(至少说出5种)
40.2 深入解析
值类型(struct、枚举、基础类型等)实例通常内联在栈、结构体字段或数组元素中,赋值常表现为按位拷贝,生命周期与作用域绑定更紧;引用类型(class、数组、string 等)实例在托管堆上分配,变量里存的是引用,赋值拷贝的是引用而非完整对象。
面试中常追问:默认传参方式、装箱、ref/out、可变 struct 的坑(如反复拷贝导致修改丢失)。游戏开发里,热路径上大量小数据用 struct、池化引用对象,是常见优化方向。
40.3 答题示例
值类型
在C#中,以下是常见的值类型:
- int
- float
- double
- byte
- short
- long
- uint
- ulong
- ushort
- sbyte
- decimal
- char
- bool
- 自定义结构体(struct)
引用类型
在C#中,以下是常见的引用类型:
- 自定义类(class)
- 数组(array)
- 字符串(string)
- 委托(delegate)
- 接口(interface)
- Object(万物之父)
值类型实例通常内联在栈帧、字段或数组元素中;引用类型对象一般在托管堆上,变量里是引用。具体位置以编译器与上下文为准,不宜简单说“值类型永远在栈上”。
40.4 关键词联想
- 值类型 / 引用类型
- 栈与托管堆
- 装箱(Boxing)
struct/classref/out- 内存布局与拷贝语义
转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 785293209@qq.com