C# 值类型的默认值

值类型    默认值
bool    FALSE
byte    0
char    '/0'
decimal    0.0M
double    0.0D
enum    表达式 (E)0 产生的值,其中 E 为 enum 标识符.
float    0.0F
int    0
long    0L
sbyte    0
short    0
struct    将所有的值类型字段设置为默认值并将所有的引用类型字段设置为 null 时产生的值。
uint    0
ulong    0
ushort    0

C# 中,结构体(`struct`)是值类型,与类(引用类型)不同。结构体的默认值由其所有字段的默认值组成。当你声明一个结构体变量但未显式初始化时,C# 会自动将其所有字段设置为其类型的默认值。 ### 结构体的默认值规则 - 所有数值类型字段(如 `int`, `double`, `bool` 等)会被初始化为 `0`。 - `bool` 类型字段默认值为 `false`。 - 引用类型字段(如 `string`、自定义类等)在结构体中默认值为 `null`。 - 可空类型(如 `int?`)默认为 `null`。 - 其他结构体字段会递归地应用默认值。 --- ### 示例代码:C# 结构体的默认值 ```csharp using System; // 定义一个结构体 public struct Person { public int Age; public string Name; public bool IsEmployed; public double Height; public DateTime BirthDate; public int? Score; // 可空类型 } class Program { static void Main() { // 声明一个结构体变量,不使用 new 初始化 Person person = default; // 或者直接 Person person; Console.WriteLine($"Age: {person.Age}"); // 输出: 0 Console.WriteLine($"Name: {person.Name}"); // 输出: (null) Console.WriteLine($"IsEmployed: {person.IsEmployed}"); // 输出: False Console.WriteLine($"Height: {person.Height}"); // 输出: 0 Console.WriteLine($"BirthDate: {person.BirthDate}"); // 输出: 0001/1/1 00:00:00 Console.WriteLine($"Score: {person.Score}"); // 输出: (null) } } ``` --- ### 解释: - `Person person;` 这样的声明会自动将 `person` 的所有字段设为默认值,即使没有调用构造函数。 - 使用 `default(Person)` 或 `default` 关键字可以显式获取结构体的默认值。 - C# 结构体**不能**定义无参数的构造函数(编译器禁止),但可以定义带参数的构造函数。 - 即使你定义了带参数的构造函数,仍然可以通过 `default` 获取字段全为默认值的实例。 --- ### 注意事项: - 如果你希望结构体在创建时总是经过初始化,建议提供有参构造函数,并避免依赖隐式默认值。 - 对于可变结构体,应尽量避免暴露公共可变字段(不符合最佳实践),推荐使用只读属性或私有字段+属性封装。 --- ### 更安全的做法:使用构造函数初始化 ```csharp public struct Person { public int Age; public string Name; public bool IsEmployed; // 自定义构造函数必须初始化所有字段 public Person(int age, string name, bool isEmployed) { Age = age; Name = name; IsEmployed = isEmployed; } } ``` > ⚠️ 注意:一旦定义了构造函数,就不能再使用无参数的 `new Person()`,但 `default(Person)` 仍可用。 --- ### 总结 C# 结构体的默认值是系统自动赋予的,基于每个字段类型的默认值。这是值类型的特性之一,确保结构体变量永远不会“未初始化”,始终处于一个确定的状态。 ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值