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