C# 3.0特性-- 对象初始化器
有一个简单的定义类,
class Book
{
public string SN { get; set; }
public string Name { get; set; }
public double Price { get; set; }
}
有三个属性,并且用自动属性语法来定义。如果需要实例化并初始化这个类的一个对象实例,就必须执行以下的语句:
Book book1 = new Book();
book1.SN = "6900000000";
book1.Name = "学C#";
book1.Price = 69.50;
如果在类定义中添加带参数构造函数如下:
public Book(string _sn, string _name, double _price)
{
this.SN = _sn;
this.Name = _name;
this.Price = _price;
}
那么把实例化和初始化合并起来,代码如下:
Book book1 = new Book("6900000000", "学C#", 69.50);
Book book1 = new Book(); // 没有无参数的构造函数,会报错
提示错误
此时向类定义中添加无参构造函数。
进入对象初始化器,这是无需在类中添加额外的代码(如构造函数)就可以实例化和初始化代码的方法。实例化对象时,要为每个初始化的、可公开访问的属性或字段使用名称-值对,来提供其值。其语法如下:
Book book1 = new Book { SN = "6900000000", Name = "学C#", Price = 69.50 };
使用对象初始化器,不能明确调用类的构造函数,而是自动调用默认的无参构造函数。这是对象初始化器在设置参数之前调用的,以便在需要时为默认构造函数中的参数提供默认值。如果提供了带参数的构造函数,那么在类中添加无参数的构造函数。
在Book类中添加一个属性(Type)Type,还另外定义一个 Type类,其属性包括 (int)Id、(string) Name,这里使用对象初始化器的嵌套使用,代码如下
Book book1 = new Book { SN = "6900000000", Name = "学C#", Price = 69.50, Type = new Type { Id = "001", Name="计算机书籍"} };
注意: 对象初始化器没有替代非默认构造函数。在初始化对象时,可以使用对象初始化器来设置属性和字段值,但这并不意味着总是知道需要初始化什么状态。通过构造函数可以为函数指定对象需要什么值,在执行代码,以立即响应这些值。