C# 3.0特性-- 对象初始化器

来源:互联网 发布:源码交易zhideyao 编辑:程序博客网 时间:2024/06/06 04:55

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类里面并没有提供无参数构造函数的方法,所以
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="计算机书籍"}};


注意: 对象初始化器没有替代非默认构造函数。在初始化对象时,可以使用对象初始化器来设置属性和字段值,但这并不意味着总是知道需要初始化什么状态。通过构造函数可以为函数指定对象需要什么值,在执行代码,以立即响应这些值。

	
				
		
原创粉丝点击