2012-08-22 34 views
1

這可能聽起來像一個noob問題。在課堂上創建對象的責任

class MyClass 
{ 
    public List<MyObjects> myObjects; 

    public MyClass() 
    { 
     //... 
    } 
} 

class UserClass 
{ 
    public void SomeFunction() 
    { 
     MyClass obj = new MyClass(); 

     //Should this belong in constructor of MyClass? 
     obj.myObjects = new List<MyObjects>; 

     //Should 'SomeFunction' initialize obj.myObjects before using it, or 
     //should it assume it has been initialized and just use it? 
     obj.myObjects.Add(..); 
    } 
} 

誰負責的MyClass.myObjects創建/初始化,調用默認的構造函數是什麼時候?

  1. MyClass的構造函數。
  2. MyClass的用戶。

回答

1

通常,類的構造函數應該做所有必要的工作,使該類處於可用狀態。在你的情況下,你應該爲myObjects提供一個訪問器方法。 OOP的原則是封裝數據。這意味着myObjects應該是私密的。您應該只能通過訪問器方法訪問它。通過這樣做,您可以在實際需要時通過訪問方法構造對象並延遲創建列表。

這是一篇涉及Constructors的wiki文章。它提到一個正確書寫的構造函數將使對象保持有效狀態。

編輯:封裝myObjects與延遲初始化(注意我假設C#,因爲您的代碼示例看起來有點像)

class MyClass 
{ 
    private List<MyObjects> myObjects; 

    public MyClass() 
    { 
     //... 
    } 

    public void Add(MyObject object) 
    { 
     MyObjects.Add(object); 
    } 

    private List<MyObjects> MyObjects 
    { 
     get 
     { 
      if (myObjects == null) 
      { 
       myObjects = new List<MyObject>(); 
      } 
      return myObjects; 
     } 
    } 
}