C#-初始化器和构造函数初始化器

初始化器分为对象初始化器和集合初始化器。下面一一介绍。
对象初始化器 对象初始化器的作用,简单点说就是可以使我们初始化一个类的代码变得更简洁。比如下面这个类:

class Person { public string Name { get; set; } public int Age { get; set; } public string Address { get; set; } }

我们要初始化它并对它赋值的话通常要这样:
Person person = new Person(); person.Name = "Slark"; person.Age = 100; person.Address = "Xi'an";

这里我们用了一行创建对象语句,加三行赋值语句。这里光person这个变量就出现了4遍,繁琐。用对象初始化器来代替这些操作:
Person person = new Person { Name = "Slark", Age = 100, Address = "Xi'an" };

同样的效果,对象初始化器只用了一行,简洁!可以看到对象初始化器将创建对象和赋值合为一行,其中赋值就是在后面大括号里做的。这里的赋值可以给所有属性赋值,也可以给部分属性赋值。
集合初始化器 既然要讲集合初始化器,那么我们就先来创建一个集合:
List intList = new List(); intList.Add(1); intList.Add(2); intList.Add(3);

好,这里我们用4行代码创建了一个3个元素的集合。集合初始化器的出现大大减少了我们对这种操作的代码量。其对应的集合初始化器代码为:
List intList = new List { 1, 2, 3 };

嗯,真的少写了很多。集合初始化器的原理也很简单,就是它默默的为我们调用了List的Add方法依次为我们添加了这3个元素。
这里我们再给一个综合运用集合初始化器和对象初始化器的例子:
List personList = new List{ new Person { Name = "Slark1", Age = 101, Address = "Xi'an1" }, new Person { Name = "Slark2", Age = 102, Address = "Xi'an2" }, new Person { Name = "Slark3", Age = 103, Address = "Xi'an3" } };

代码里用集合初始化器初始化了personList,然后用对象初始化器初始化了3个Person对象实例。

构造函数初始化器
【C#-初始化器和构造函数初始化器】 C#构造函数初始化符可以包含对同一个类的另一个构造函数的调用(使用前面介绍的语法),也可以包含对直接基类的构造函数的调用(使用相同的语法,但应使用base关键字代替this)。初始化符中不能有多个调用。

class Car { private string description; private uint nWheels; public Car(string description, uint nWheels) { this.description = description; this.nWheels = nWheels; public Car(string description) : this(description, 4){ } // etc }


这里,this关键字仅调用参数最匹配的那个构造函数。注意,构造函数初始化器在构造函数之前执行。现在假定运行下面的代码: Car myCar = new Car("Proton Persona"); 在本例中,在带一个参数的构造函数执行之前,先执行带2个参数的构造函数

    推荐阅读