我们知道在C#中要初始化一个对象可以用构造器或者声明公有属性然后在new一个对象之后在对属性赋值必须一步一步的来在C#中可以有一种很简单的方法对对象和集合进行初始化工作
看个例子
publicclassPoint{
intxy;
publicintX{get{returnx;}set{x=value;}}
publicintY{get{returny;}set{y=value;}}
}
vara=newPoint{X=Y=};
//相当于vara=newPoint();aX=;aY=;
//集合初始化器
List<int>num=newList<int>{};
//相当于ICollection<T>Add(T)即numAdd()
我们明显的看到初始化工作又被简单化了注意这里用到的技术仍然是编译时技术也就是编译器会在背后替你做好多工作而不是运行时的技术
从上面我们可以看出来一个对象要想像上面的那种形式初始化必须满足几个条件首先必须得有公有的无参构造器否则编译器就无法new出一个对象更别说初始化了其次在进行赋值的时候这些属性必须是共有的这点就不必解释了
如果想看看背后编译器做了哪些工作我们可以用ILDasm对上面的代码进行反汇编就可以看到背后自动生成的一些东西了