c#入门-对象初始化器

对象初始化器

在使用构造器后,如果紧接着需要对其的字段或属性进行赋值,这称为初始化操作。
初始化操作可以使用大括号接在构造器后,用来醒目提示这是一个初始化操作。

class Time
{
	public int year;
	public int month;
	public int day;
	public int hour;
	public int minute;
	public int second;
}

使用对象初始化器时,每个字段或属性只能进行一次赋值。
每个赋值使用逗号隔开,赋值时只需要写属性或字段的名字,不需要写你对这个对象的变量名。

Time t = new Time()
{
	year = 12,
	month = 66
};

如果此构造器是无参构造器,那么还可以省略构造器的小括号

Time t = new Time
{
	year = 12,
	month = 66
};

区别

对象初始化器的主要作用是为了醒目提醒。
并没有性能上的优势。
他仍然会经历 初始值->构造器->对象初始化器的三次赋值过程。
即便后续有赋值操作会将前次操作覆盖,也照样会进行值的构建和赋值。

但初始化器和手动赋值仍有一个区别:
对象初始化器中可以为init访问器的属性赋值(readonly修饰的字段不行)。

参照的对象初始化器

仅对值类型有效。
如果希望复制一个已有的结构,但在其基础上修改部分属性,则可以使用with初始化器。
在参照的结构后+with+对象初始化器。所有对象初始化器中没有的字段都会赋值参照的结构。

Time t = new Time() { year = 3, month = 4, day = 5 };
var t1 = t with { second = 10, day = 6 };
Console.WriteLine(t1.year);

struct Time
{
	public int year;
	public int month;
	public int day;
	public int hour;
	public int minute;
	public int second;
}
  • 1
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值