У меня есть класс
class Rational { private int _n; private int _m; public Rational(int n, int m) { _n = n; _m = m; } }
Но m должно быть > 0. Что я должен сделать, чтобы уведомить пользователя, что он вводит неверные данные в конструктор?
m
> 0
Вы можете бросить ArgumentException или добавить контракт, требующий m > 0
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; }
Несмотря на то, что это противоречиво (особенно в C ++), я думаю, что наиболее простой способ сделать это - бросить ArgumentException.
Рекомендации Microsoft рекомендуют выбрасывать исключения из конструкторов , когда это имеет смысл, например, если аргументы не позволяют создавать пригодный для использования объект (как в вашем случае).
В C # есть официальные рекомендации по проектированию конструктора в статье http://msdn.microsoft.com/en-us/library/ms229060.aspx, и там написано Делать исключения из конструкторов экземпляров, если это уместно .
Я бы сказал,бросить исключение аргумента, как говорили другие люди, но я бы использовал несколько предостережений, что если вы создали что-то одноразовое в вашем объекте, очистите его перед тем, как выдавать исключение