使用可重载的构造函数时,有时使用一个构造函数调用另一个构造函数很有用。在C#中,可以通过this关键字的另一种形式来实现该操作
下面来看一下案例
class Program
{
static void Main(string[] args)
{
XYcooord t1 = new XYcooord();
XYcooord t2 = new XYcooord(8, 9);
XYcooord t3 = new XYcooord(t2);
Console.WriteLine("t1 x={0} y={1}",t1.x,t1.y);
Console.WriteLine("t2 x={0} y={1}", t2.x, t2.y);
Console.WriteLine("t3 x={0} y={1}", t3.x, t3.y);
}
}
class XYcooord
{
public int x, y;
public XYcooord() : this(0, 0)
{
Console.WriteLine("这是没有参数的构造函数!");
}
public XYcooord(XYcooord obj) : this(obj.x, obj.y)
{
Console.WriteLine("这是一个对象的参数!");
}
public XYcooord(int i, int j)
{
Console.WriteLine("这是2个参数的构造函数");
x = i;
y = j;
}
}
结果:
这是2个参数的构造函数
这是没有参数的构造函数!
这是2个参数的构造函数
这是2个参数的构造函数
这是一个对象的参数!
t1 x=0 y=0
t2 x=8 y=9
t3 x=8 y=9
结果可以看出,在执行构造函数时候,先执行this关键字指定参数列表相匹配的重载构造函数,然后再执行原始构造函数。
通过this调用重载构造函数可以避免代码的不必要重复。
另一个优点是在未显示地指定参数时可以使用隐含的“默认参数”创建构造函数。例如:
public XYcooord(int x) : this(x,x) {
}
该构造函数自动默认y和x值相等,当然,必须谨慎使用"默认参数"因为误用他们容易让类用户产生困惑。