C # 构造函数重载

如何在 C # 中使用构造函数:

public Point2D(double x, double y)
{
// ... Contracts ...


X = x;
Y = y;
}


public Point2D(Point2D point)
{
if (point == null)
ArgumentNullException("point");
Contract.EndContractsBlock();


this(point.X, point.Y);
}

我需要它不复制代码从另一个构造函数..。

115730 次浏览
public Point2D(Point2D point) : this(point.X, point.Y) { }

您可以将公共逻辑分解为一个私有方法,例如从两个构造函数调用的称为 Initialize的方法。

由于要执行参数验证,因此不能求助于构造函数链接。

例如:

public Point2D(double x, double y)
{
// Contracts


Initialize(x, y);
}


public Point2D(Point2D point)
{
if (point == null)
throw new ArgumentNullException("point");


// Contracts


Initialize(point.X, point.Y);
}


private void Initialize(double x, double y)
{
X = x;
Y = y;
}

也许你的类并不完整,就我个人而言,我对所有重载的构造函数都使用了一个私有的 init ()函数。

class Point2D {


double X, Y;


public Point2D(double x, double y) {
init(x, y);
}


public Point2D(Point2D point) {
if (point == null)
throw new ArgumentNullException("point");
init(point.X, point.Y);
}


void init(double x, double y) {
// ... Contracts ...
X = x;
Y = y;
}
}