Перегрузка конструкторов С#
Как я могу использовать конструкторы в С# следующим образом:
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);
}
Мне нужно, чтобы он не копировал код из другого конструктора...
Ответы
Ответ 1
Вы можете разделить свою общую логику на частный метод, например, называемый 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;
}
Ответ 2
public Point2D(Point2D point) : this(point.X, point.Y) { }
Ответ 3
Возможно, ваш класс не совсем завершен. Лично я использую частную функцию 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;
}
}