C#基础知识-个人学习笔记(1)数据类型
·
一、值类型
1.定义
值类型直接存储数据本身,通常分配在栈上(但作为类的成员时可能分配在堆上)。赋值时会创建数据的副本。
2.常用值类型
| 类型 | 关键字 | 精度 | 大小 |
| 无符号8位整数类型 | byte | 0 ~ 255 | 1 byte |
| 有符号16位整数类型 | short | -32,768 ~ 32,767 | 2 byte |
| 有符号32位整数类型 | int | -2,147,483,648 ~ 2,147,483,647 | 4 byte |
| 有符号64位整数类型 | long | -9,223,372,036,854,775,808 ~ 9,223,372,036,854,775,807 | 8 byte |
| 无符号16位整数类型 | ushort | 0 ~ 65,535 | 2 byte |
| 无符号32位整数类型 | uint | 0 ~ 4,294,967,295 | 4 byte |
| 无符号64位整数类型 | ulong | 0 ~ 18,446,744,073,709,551,615 | 8 byte |
| 单精度浮点型 | float | 约 6~9 位有效数字 | 4 byte |
| 双精度浮点型 | double | 约 15~17 位有效数字 | 8 byte |
| 高精度小数型 | decimal | 28~29 位有效数字 | 16 byte |
| 布尔逻辑型 | bool | true/false | 1 byte |
| Unicode字符 | char | 单个 UTF-16 代码单元 | 2 byte |
其他:
- enum关键字,本质是整数类型(默认int)的命名常量集合。
- struct关键字,可包含字段、方法、属性等,但不能继承(可实现接口)。
3.特征
-
不能为null(除非使用可空值类型T)
-
每个值类型变量独立保存自己的数据,一个变量的修改不会影响另一个
二、引用类型
1.定义
引用类型存储对数据的引用(内存地址),实际数据分配在托管堆上。赋值时复制引用,多个变量可指向同一对象。
2.常用引用类型
- 类(class)
- 接口(interface)
- 委托(delegate)
- 数组(array)
- 字符串(string)
- 动态类型(dynamic):编译时忽略类型检查,运行时解析操作。
3.特征:
-
可以为null
-
一个变量对对象内部状态的修改会影响到所有指向同一对象的其他变量
三、指针类型
1.定义
指针类型用于存储内存地址,类似于 C/C++ 的指针。仅在unsafe上下文中可用,且需要开启项目的不安全代码编译选项。
2.限制:
-
不能指向引用类型或包含引用类型的结构体
-
不能对GC托管对象进行指针操作(可能导致 GC 移动对象)
四、装箱与拆箱
装箱:将值类型隐式转换为object或任一接口类型。在堆上分配内存 → 复制值类型数据 → 返回引用地址。
拆箱:将object或接口类型显式转换回原始值类型。检查对象是否为目标值类型的装箱实例 → 复制回栈上的值类型变量。
示例:
int i = 123;
object obj = i; // 装箱
int j = (int)obj; // 拆箱
// 错误的拆箱
long l = (long)obj; // 抛出异常,因为 obj 装箱的是 int
更多推荐
所有评论(0)