1

我预计对象实例化的错误参数会经常发生。

IA应该先检查参数,然后如果有效则创建对象。B)创建由 try/catch 块包围的对象,并让构造函数在无效时抛出异常。

是否有任何理由选择 A 或 B 而不是另一个?

4

3 回答 3

3

如果只有少数(一个或两个)参数使用工厂模式或静态方法进行创建,请尽量避免构造函数中的异常。

或者,如果有许多(或可选)参数,请使用构建器模式

此外,您可以公开验证方法,因此谨慎的客户可能会先检查。

于 2013-06-11T23:19:25.070 回答
1

您还有另一个选择是使用无参数构造函数和返回的初始化方法,例如,truefalse

这边走:

  1. 您可以多次重复使用同一个对象(手动或使用对象池)
  2. 验证逻辑将被封装

所以你的班级可能看起来像这样:

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;
    }
}
于 2013-06-11T23:16:12.260 回答
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 是公共财产,因此您不会错过检查

于 2013-06-11T23:42:31.853 回答