值类型
- 存储在栈里
- 值类型是C#类型中的两个主要类型之一
- 所有的值类型均隐式派生自 System.ValueType
- 值类型在内存管理方面具有更好的效率,并且不支持多态,适合用做存储数据的载体
- 值类型的变量包含类型的实例, 将一个值类型变量赋给另一个值类型变量时,将复制包含的值
整型数值类型
- 整型数值类型表示整数
- 整型数值类型均为值类型 ,它们还是简单类型,可以使用整数文本进行初始化
- 整型数值类型都支持算术、位逻辑、比较和相等运算符
C#类型/关键字 | 范围 | 大小 | .NET 类型 |
---|
sbyte | -128 到 127 | 8 位带符号整数 | System.SByte |
byte | 0 到 255 | 无符号的 8 位整数 | System.Byte |
short | -32,768 到 32,767 | 有符号 16 位整数 | System.Int16 |
ushort | 0 到 65,535 | 无符号 16 位整数 | System.UInt16 |
int | -2,147,483,648 到 2,147,483,647 | 带符号的 32 位整数 | System.Int32 |
uint | 0 到 4,294,967,295 | 无符号的 32 位整数 | System.UInt32 |
long | -9,223,372,036,854,775,808 到 9,223,372,036,854,775,807 | 64 位带符号整数 | System.Int64 |
ulong | 0 到 18,446,744,073,709,551,615 | 无符号 64 位整数 | System.UInt64 |
nint | 取决于(在运行时计算的)平台 | 带符号的 32 位或 64 位整数 | System.IntPtr |
nuint | 取决于(在运行时计算的)平台 | 无符号的 32 位或 64 位整数 | System.UIntPtr |
浮点数值类型
- 浮点数值类型表示实数
- 浮点型数值类型均为值类型,它们还是简单类型,可以使用真实文本进行初始化
- 浮点数值类型都支持算术、比较和相等运算符
C#类型/关键字 | 范围 | 精度 | 大小 | .NET 类型 |
---|
float | ±1.5 x 10−45 至 ±3.4 x 1038 | 约 6-9 位 | 4个字节 | System.Single |
double | ±5.0 × 10−324 到 ±1.7 × 10308 | 约 15-17 位 | 8个字节 | System.Double |
decimal | ±1.0 x 10-28 至 ±7.9228 x 1028 | 28-29 位 | 16 个字节 | System.Decimal |
bool
- bool 是 .NET System.Boolean 结构类型的别名
- 表示一个布尔值,可以为 true 或者 false
- 默认值为 false
char
- char 是 .NET System.Char 结构类型的别名
- 表示 Unicode UTF-16 字符
- 默认值为 \0,即 U+0000
类型 | 范围 | 大小 | .NET 类型 |
---|
char | U+0000 到 U+FFFF | 16位 | System.Char |
枚举
- 枚举是由基础整型数值类型的一组命名常量定义的值类型
- 定义枚举类型的关键字为enum
- 枚举成员默认关联的常数值类型为 int ,从 0 开始,并按定义文本顺序递增 1
结构
- 结构是一种可封装数据和相关功能的值类型
- 定义结构类型的关键字为struct
- 从 C# 7.2 开始,可以使用 readonly 修饰符来声明结构类型为不可变,但结构的所有数据成员也都必须是只读的
元组
- 使用元组功能需要 System.ValueTuple 类型和相关的泛型类型
可为null的值类型
数值转换
隐式数值转换
显示数值转换
引用类型
- 分配在堆上
- 引用类型是C#类型中的两个主要类型之一
- 引用类型直接继承自System.Object
- 引用类型的默认值为null
- 引用类型两种变量可引用同一对象;对一个变量执行的操作会影响另一个变量所引用的对象
class
- 类只能单继承
- 类可以实现多个接口
- 类的默认访问修饰符为 internal
- 类成员的默认访问修饰符为 private
访问修饰符有public、protected internal、protected、internal、private、private protected等六种
类可包含构造函数、常量、Fields、终结器、方法、属性、索引器、运算符、事件、委托、类、接口、结构类型、枚举类型等成员
interface
record
内置引用类型
对象类型
字符串类型
委托类型
动态类型
void
var
内置类型
非托管类型
满足非托管类型的条件
- sbyte、byte、short、ushort、int、uint、long、ulong、char、float、double、decimal 或 bool
- 任何枚举类型
- 任何指针类型
- 任何用户定义的 struct 类型,只包含非托管类型的字段,并且在 C# 7.3 及更早版本中,不是构造类型
默认值
类型 | 默认值 |
---|
任何引用类型 | null |
任何内置整数数值类型 | 0 |
任何内置浮点型数值类型 | 0 |
bool | false |
char | ‘\0’ (U + 0000) |
enum | 表达式 (E)0 生成的值,其中 E 是枚举标识符 |
struct | 将所有值类型的字段设置为其默认值,将所有引用类型的字段设置为 null |
任何可以为 null 的值类型 | HasValue 属性为 false 且 Value 属性未定义的实例 |