我期望对象实例化的错误参数经常发生。
我应该吗? A)首先检查参数然后创建对象(如果有效)。 B)创建try / catch块&包围的对象。让构造函数在无效时抛出异常。有没有理由选择A或B而不是另一个?
答案 0 :(得分:3)
如果只有少数(一个或两个)参数使用factory pattern或静态方法进行创建,请尝试避免构造函数中的异常。
或者,如果有许多(或可选)参数,请使用builder pattern。
此外,您可以公开验证方法,因此谨慎的客户可能会先检查。
答案 1 :(得分:1)
您还有另一种选择是使用无参数构造函数和返回true
或false
的初始化方法。
这样:
所以你的课程看起来像这样:
class Foo
{
private Bar m_bar;
public Foo()
{
// do nothing here
}
public bool Initialize(Bar bar)
{
if (bar == null) // validation logic here
return false;
m_bar = bar;
return true;
}
}
答案 2 :(得分:0)
class Check
{
private Some getsome;
public Some GetSome
{
get
{
return getsome;
}
set
{
if(value != null) //or any other logic you want
getsome = value; //if another logic like value < 10
else //you can throw - throw new ArgumentException - for example
throw new ArgumentNullException("value");
}
}
public Check()
{
}
}
如果你想在构造函数中传递它
public Check(Some s)
{
GetSome = s;
}
请记住构造函数中的GetSome是公共属性,所以你不要错过检查