类的对象初始化 了解C#特性:对象集合初始化器[1]
![类的对象初始化 了解C#特性:对象集合初始化器[1]](http://img.zhputi.com/uploads/2c60/2c60797d800f6c0b9c91c39236c74b32446708.jpg)
了解C#特性:对象集合初始化器[1]
在写一些实体类的时候 我们往往在写构造方法的时候思考很长时间 除了一个无参构造器外还在想需要写几个构造器呢?哪些参数是需要初始化的 现在你再也不需要为这事烦恼了 C# 为你提供了对象集合初始化器:
//////图书类///publicclassBook{ /// ///图书名称 /// publicstringTitle{get;set;} /// ///单价 /// publicfloatPrice{get;set;} /// ///作者 /// publicstringAuthor{get;set;} /// ///ISBN号 /// publicstringISBN{get;set;}}//对象初始化器Bookbook=newBook{Title= Inside ISBN= };
现在你想初始化几个就初始化几个 不需要出现这种情况
public Book():this( ){}public Book(string title):this(title ){}public Book(string title float price):this(title price ){}public Book(string title float price string isbn){ this Title = title; this Price = price; this ISBN = isbn;}
这一串的构造方法都是为了应付不同的初始化情况 好了 来看看对象初始化器编译器在后面为我们做了些什么呢?使用Reflector反编译程序集
Book<>g__initLocal =newBook();<>g__initLocal Title= Inside ;<>g__initLocal ISBN= ;Bookbook=<>g__initLocal ;C#编译器生成了一个新的局部变量<>g__initLocal 调用Book的默认无参构造方法初始化它 然后对它的属性进行赋值 最后将这个局部变量赋值给book 看到这里 我们应该想到 要使用对象初始化器 那么这个对象必须有一个无参构造方法 如果你给这个方法写了一个有参构造方法而将它的默认无参构造方法覆蓋了并且没有提供一个新的无参构造方法 那么使用对象初始化器编译的时候是不会通过的(不过想不通 为啥C#编译器生成这么一个奇怪的局部变量名字 还有为啥不直接使用book呢) 像下面的代码不更好
Bookbook=newBook();book Title= Inside ;book ISBN= ; lishixinzhi/Article/program/net/201311/14838