C#3.0语言新特性之对象和集合初始化器
2009-03-11 08:19:23 来源:WEB开发网对于这个类,按照一般方法,我们会这样来初始化它:
//调用自定义的构造函数
Point p = new Point(100,200);
//或者手动指定每个属性
Point p1 = new Point();
p1.X = 100;
p1.Y = 200;
现在我们采用类初始化器的C# 3.0代码则可以写成下面的样子:
var p1 = new Point { X = 100, Y = 200 };
Point p = new Point { X = 100, Y = 200 };
其中第一个是隐式类型变量。这里并没有显式调用Point的构造函数,仅仅是将值设给了公共的X和Y属性。在这里,类型的缺省构造函数被调用,紧跟着将值赋给指定的属性。从这一点上说,最后这两个实例实际上就是第一个实例的简化写法。
从上面的例子中,我们可以看出:
l 对象初始化器由一系列的成员初始化器构成,包围在{和}记号中,并用逗号进行分隔。每个成员初始化器以对象的一个可访问的域或属性的名字开始,后跟一个等号,之后是一个表达式或一个对象或集合初始化器。如果对象初始化其中包括了对同一个域或属性的多于一个的成员初始化器,将会发生错误。
l 在等号后面指定了表达式的成员初始化器的处理与域和属性的赋值一致。
l 在等号后面指定了对象初始化器的成员初始化器也是对一个嵌套对象的初始化。与为域或属性赋一个新值不同,对象初始化器中的赋值被视为对域或属性的成员进行赋值。一个具有值类型的属性不能通过这种构造来进行初始化。
l 在等号后面指定了集合初始化器的成员初始化器也是对一个嵌套集合的初始化。与为域或属性赋一个新的集合不同,初始化器中给定的元素将被添加到域或属性所引用的集合中。该域或属性必须是一个满足下一节所指定的需求的集合类型。
更多精彩
赞助商链接