Неверные данные в конструкторе - PullRequest
3 голосов
/ 04 сентября 2010

У меня есть класс

class Rational
{
   private int _n;
   private int _m;

   public Rational(int n, int m)
   {
      _n = n;
      _m = m;
   }
}

Но m должно быть > 0. Что я должен сделать, чтобы уведомить пользователя, что он вводит неверные данные в конструктор?

Ответы [ 3 ]

4 голосов
/ 04 сентября 2010

Вы можете бросить ArgumentException или добавить контракт, требующий m > 0

if(m <= 0) throw new ArgumentException("Denominator must be positive");

или

public Rational(int n, int m)
{
    Contract.Requires(m > 0);
    _n = n;
    _m = m;
}
3 голосов
/ 04 сентября 2010

Несмотря на то, что это противоречиво (особенно в C ++), я думаю, что наиболее простой способ сделать это - бросить ArgumentException.

Рекомендации Microsoft рекомендуют выбрасывать исключения из конструкторов , когда это имеет смысл, например, если аргументы не позволяют создавать пригодный для использования объект (как в вашем случае).

2 голосов
/ 04 сентября 2010

В C # есть официальные рекомендации по проектированию конструктора в статье http://msdn.microsoft.com/en-us/library/ms229060.aspx, и там написано Делать исключения из конструкторов экземпляров, если это уместно .

Я бы сказал,бросить исключение аргумента, как говорили другие люди, но я бы использовал несколько предостережений, что если вы создали что-то одноразовое в вашем объекте, очистите его перед тем, как выдавать исключение

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...