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); }
我需要它不复制另一个构造函数的代码…
你可以将你的通用逻辑分解为一个私有方法,例如从两个构造函数中调用的Initialize
。
由于你想执行参数validation的事实,你不能求助于构造函数链。
例:
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; }
public Point2D(Point2D point) : this(point.X, point.Y) { }
也许你的class级不完整。 就我个人而言,我使用一个私有的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; } }