在构造函数中抛出异常或在创建对象时事先验证参数
本文关键字:验证 参数 创建对象 构造函数 抛出异常 | 更新日期: 2023-09-27 18:18:01
我希望经常出现对象实例化的错误参数。
我应该A)首先检查参数,然后创建对象,如果有效。B)创建被try/catch块包围的对象&让构造函数在无效时抛出异常。
有理由选择A或B而不是其他吗?
如果只有几个(一两个)参数,请使用工厂模式或静态方法进行创建,请尽量避免构造函数中的异常。
或者,如果有很多(或可选的)参数,使用构建器模式。
此外,您可以公开验证方法,因此谨慎的客户端可能会先检查。
另一个选择是使用无参数构造函数和初始化方法,例如返回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;
}
}
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是公共属性所以你不会错过检查