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<int> intList = new List<int>();
intList.Add(1);
intList.Add(2);
intList.Add(3);

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

List<int> intList = new List<int> { 1, 2, 3 };

嗯,真的少写了很多。集合初始化器的原理也很简单,就是它默默的为我们调用了List的Add方法依次为我们添加了这3个元素。

这里我们再给一个综合运用集合初始化器和对象初始化器的例子:

List<Person> personList = new List<Person>
{
    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#构造函数初始化符可以包含对同一个类的另一个构造函数的调用(使用前面介绍的语法),也可以包含对直接基类的构造函数的调用(使用相同的语法,但应使用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个参数的构造函数
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值