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);
}
}