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;
}

你可能感兴趣的:(#,面向对象,c#)