我有一个班级
class Rational
{
private int _n;
private int _m;
public Rational(int n, int m)
{
_n = n;
_m = m;
}
}
但m
应为> 0
。如何通知用户他向构造函数输入了错误的数据?
答案 0 :(得分:4)
您可以抛出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;
}
答案 1 :(得分:3)
尽管它存在争议(特别是在C ++中),但我认为最直接的做法是抛出ArgumentException
。
Microsoft准则recommend throwing exceptions from constructors何时有意义,例如,如果参数不允许创建可用对象(这是您的情况)。
答案 2 :(得分:2)
在C#中,文章http://msdn.microsoft.com/en-us/library/ms229060.aspx中有官方构造函数设计指南,并且在那里它表示在适当的情况下从实例构造函数中抛出异常。
我会说抛出一个参数异常,正如其他人所说,但我会使用一些警告,如果你在对象中创建了任何Disposable,那么在抛出异常之前进行清理