2012-08-22 1 views
1

Cela peut sembler une question de noob.Responsabilité de la création d'objet dans la classe

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(..); 
    } 
} 

Qui est responsable de la création/initialisation de MyClass.myObjects, lorsque le constructeur par défaut est invoquée?

  1. Constructeur de MyClass.
  2. Utilisateur de MyClass.

Répondre

1

En général, le constructeur d'une classe doit effectuer tous les travaux nécessaires pour que cette classe soit dans un état utilisable. Dans votre cas ici, vous devriez probablement fournir une méthode d'accès pour myObjects. Les principes de la POO disent d'encapsuler les données. Cela signifie que myObjects doit être privé. Vous ne devriez y avoir accès que par des méthodes d'accès. En faisant cela, vous pouvez construire l'objet et paresseusement créer la liste via la méthode d'accesseur quand elle est réellement nécessaire. Voici un article wiki traitant de Constructors. Il mentionne qu'un constructeur correctement écrit laissera l'objet dans un état valide.

EDIT: encapsulées MyObjects avec initialisation paresseuse (Notez Je présume que C# depuis votre échantillon de code ressemble un peu comme ça)

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; 
     } 
    } 
} 
Questions connexes