2014-11-06 3 views
2

Вот мой кодКак проверить входные данные для перегруженных конструкторов?

public class MyClass 
{ 
    int LeftPoints; 
    int RightPoints; 

    public MyClass(int points) 
     : this (points, points) 
    { 
     if (points < 0) 
      throw new ArgumentOutOfRangeException("points must be positive"); 
    } 

    public MyClass(int leftPoints, int rightPoints) 
    { 
     if (leftPoints < 0) 
      throw new ArgumentOutOfRangeException("leftPoints must be positive"); 
     if (rightPoints < 0) 
      throw new ArgumentOutOfRangeException("rightPoints must be positive"); 
    } 
} 

Очевидно, что если я позвоню new MyClass(-1) он бросает сообщение «leftPoints должен быть положительным».

Можно перегрузить первый конструктор с помощью : this (points, points) и по-прежнему получить «правильную» проверку?

+1

Вы можете компилировать оба исключения вместе, то бросить [AggregateException] (http://msdn.microsoft.com/ en-us/library/system.aggregateexception (v = vs.110) .aspx) – paqogomez

+0

Почему вы не используете неподписанные int 'public MyClass (uint points)', тогда он будет только положительным в любом случае – OJay

ответ

2

Вы не можете достичь этого, вызвав второй конструктор из первого.

Если это повторное использование кода, вы после этого, вы можете использовать другой подход:

public MyClass(int points) 
{ 
    if (points < 0) 
     throw new ArgumentOutOfRangeException("points must be positive"); 
    Init(points, points); 
} 

public MyClass(int leftPoints, int rightPoints) 
{ 
    if (leftPoints < 0) 
     throw new ArgumentOutOfRangeException("leftPoints must be positive"); 
    if (rightPoints < 0) 
     throw new ArgumentOutOfRangeException("rightPoints must be positive"); 
    Init(leftPoints, rightPoints); 
} 

private void Init(int leftPoints, int rightPoints) 
{ 
    LeftPoints = leftPoints; 
    RightPoints = rightPoints; 
} 
0

Нет, нет.

Вы заявили, что new MyClass(-1) - это то же самое, что и new MyClass(-1,-1), за которым следует код конструктора MyClass(int). Это именно то, что у вас есть.

 Смежные вопросы

  • Нет связанных вопросов^_^