C#3.0语言新特性之对象和集合初始化器
2009-03-11 08:19:23 来源:WEB开发网l 对象初时化器是利用了编译器对对象中的对外可见的字段或属性进行按序赋值,在编译还是隐式调用了构造函数,对字段或属性的赋值可以是一个或是多个。
20.4.2 在初始化语法中调用自定义构造函数
在上面的例子中,Point类型初始化时隐式地调用了缺省构造函数。其实我们也被允许直接显式指明使用哪一个构造函数,比如:
Point p = new Point() { X = 100, Y = 200 };
当然,也可以不调用缺省的构造函数,而是使用自定义的两个参数的那个构造函数,如下所示:
Point p = new Point(10, 20) { X = 100, Y = 200 };
在上面的代码中,执行的结果是构造函数参数里的10,20被忽略,最终的实例是xPos=100,yPos=200。在目前的Point类定义中,调用自定义的构造函数没什么太大的用处,反倒显得累赘。然而,我们给Point结构体新增加一个允许在调用时指定一个颜色(PointColor的枚举类型)的构造函数,那么这样的自定义构造函数与初始化语法之组合就显得很好很强大了。现在,我们来把把Point结构体重构一下,代码如下所示:
public enum PointColor
{
白色,
黑色,
绿色,
蓝色
}
public class Point
{
private int xPos, yPos;
private PointColor c;
public Point()
{
}
public Point(PointColor color)
{
xPos = 0;
yPos = 0;
c = color;
}
public Point(int x, int y)
{
xPos = x;
yPos = y;
c = PointColor.绿色;
}
public int X
{
get { return xPos; }
set { xPos = value; }
}
public int Y
{
get { return yPos; }
set { yPos = value; }
}
public override string ToString()
{
return string.Format("[{0}, {1}, Color = {2}]", xPos, yPos, c);
}
}
更多精彩
赞助商链接