0%

C# Object Initialization

1. 概述

为了简化对象初始化的流程,C# 提供了 对象初始化语法

简单的来说就是通过类似 数组初始化 的方法来对变量进行初始化操作。

2. 语法

1
Point p = new Point {x = 1.0, y = 2.0};

3. 原理

此语法实际上是一个语法糖,其原理就是先调用 默认构造函数,然后再对每个属性或者字段 依次赋值

和以下代码行为相同。

1
2
3
Point point = new Point();
point.x = 1.0;
point.y = 2.0;

4. 调用自定义构造函数

对象初始化块除了调用默认的构造函数以外,还可以调用自定义的构造函数。

1
Point point = new Point("This is a point") {x = 1.0, y = 2.0};

5. 初始化内部引用属性

由于自动属性默认为引用类型赋值为 null ,所以内部的属性必须经过正确的初始化之后才能使用。

为了简化繁琐的声明语句, C# 也提供了对内部引用属性的初始化语法

1
2
3
4
5
Rectangle rect = new Rectangle
{
TopLeft = new Point { X = 10, Y = 10 }, // 注意逗号
BottomRight = new Point { X = 200, Y = 200 }
}; // 注意分号

其行为和如下代码相同:

1
2
3
4
5
6
7
8
9
10
11
Rectangle rect = new Rectangle();

Point p1 = new Point();
p1.X = 10;
p1.Y = 10;
rect.TopLeft = p1;

Point p2 = new Point();
p2.X = 200;
p2.Y = 200;
rect.BottomRight = p2;