如何在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);
}
我需要它不复制来自另一个构造函数的代码...
发布于 2011-04-06 01:16:01
您可以将公共逻辑分解为私有方法,例如从两个构造函数调用的名为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;
}
发布于 2011-04-06 01:13:46
public Point2D(Point2D point) : this(point.X, point.Y) { }
发布于 2011-04-06 01:20:52
也许你的课程还不够完整。就我个人而言,我对所有重载的构造函数都使用私有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;
}
}
https://stackoverflow.com/questions/5555715
复制相似问题