簡體   English   中英

在構造函數中拋出異常或在創建對象時預先驗證參數?

[英]Throw exception in constructor or validate parameters beforehand when creating an object?

我期待一個錯誤的參數,對象實例化經常發生。

應該IA)首先檢查參數然后創建對象(如果有效)。 B)創建由try / catch塊包圍的對象,並使構造函數在無效時拋出異常。

是否有理由選擇A或B而不是另一個?

如果只有少數(一個或兩個)參數使用工廠模式或靜態方法進行創建,請盡量避免構造函數中的異常。

或者,如果有許多(或可選)參數,則使用構建器模式

此外,您可以公開驗證方法,因此謹慎的客戶可能會先檢查。

另一個選擇是使用無參數構造函數和返回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;
    }
}
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;
}

在contructor GetPage中的remenber是公共財產,所以你不要錯過檢查

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM