c# 3.0 get set 默认值

本文介绍了C#3.0中新增的快捷属性功能,通过对比传统的属性定义方式,展示了如何使用更简洁的{get;set;}

之前曾经介绍过 C# 3.0 { get; set; } 默认值,本文是在其基础上完成的,增加了些内容。

.NET Framework 3.5 使用的是 C# 3.0,C# 3.0 有一些新的语言特性,其中有一项就是快捷属性。

之前的写法:

private int _id = 0;
public int Id
{
get
{
return _id;
}
set
{
_id = value;
}
}

在 C# 3.0 中可以简写为这样:

public int Id { get; set; }

C# 3.0 { get; set; } 默认值

这就不得不说{ get; set; } 的默认值了,因为不存在了私有自段,我们无法人工指定默认值了,那么系统的默认值是什么呢?

  • 对于 int 类型,默认值是 0;
  • 对于 int? 类型,默认值是 null;
  • 对于 bool 类型,默认值是 false;
  • 对于 bool? 类型,默认值是 null;
  • 对于 string 类型,默认值是 null;
  • 对于 string? 类型,哈哈,没有这种写法,会出错;
  • 对于 DateTime 类型,默认值是 0001-01-01 00:00:00;
  • 对于 DateTime? 类型,默认值是 null;
  • 对于 enum 类型,默认值是值为 0 的项,如果不存在 0 的 enum 项,它仍然是 0,相关内容可参见:C# 枚举(enum)
  • 对于 enum? 类型,默认值是 null;
  • 对于 class 类型,默认值是未实例化的对象引用;
  • 对于 class? 类型,哈哈,没有这种写法,会出错。

关于类型加 ?,表示这种类型的值可为 null,比如 int 本来没有 null 值,加上 int? 就可以为 null 了。

### 设置C#属性的默认值C#中,可以通过多种方式为`get`和`set`访问器定义的属性设置默认值。一种常见的方式是在声明属性时直接赋值[^1]。 #### 使用自动实现的属性初始化表达式 自C# 6.0起,支持使用初始值设定项来简化代码编写: ```csharp public class Person { public string Name { get; set; } = "Unknown"; // 默认名称设为未知 } ``` 这种方式不仅简洁明了,而且提高了可读性和维护性。 #### 构造函数内初始化 另一种方法是在类的构造函数内部显式地给属性赋予初值: ```csharp public class Employee { private string _department; public string Department { get => _department; set => _department = value ?? throw new ArgumentNullException(nameof(value)); } public Employee() { Department = "General"; } } ``` 此模式允许更复杂的逻辑处理,并能确保对象创建之初即处于有效状态。 #### 只读属性与只写属性 对于某些特殊场景下的需求,还可以考虑采用仅具有getter或setter的形式: - **readonly字段**:一旦实例化之后就不能再改变其值; - **init-only setter**:引入于C# 9.0,在对象构建期间可以修改但后续不可更改[^2]; 例如: ```csharp public class Product { public string SKU { get; init; } = Guid.NewGuid().ToString(); // 初始化时不为 public decimal Price { get; private set; } = 0m; // 私有设置防止外部随意改动价格 } ``` 上述例子展示了如何利用不同的特性组合满足特定业务规则的要求。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值