2010-12-16 191 views
4

Laquelle des deux initialisations est la meilleure?initialisation de membre à l'intérieur ou à l'extérieur du constructeur

public class ServiceClass 
{ 
    private DataManager dataManager = new DataManager(); 
    private Dictionary<string, string> stringDictionary = new Dictionary<string, string>(); 
    private Dictionary<string, DateTime> timeDictionary = new Dictionary<string, DateTime>(); 
    public ServiceClass() 
    { 
     //other object creation code 
    } 
} 

OU

public class ServiceClass 
{ 
    private DataManager dataManager; 
    private Dictionary<string, string> stringDictionary; 
    private Dictionary<string, DateTime> timeDictionary; 
    public ServiceClass() 
    { 
     dataManager = new DataManager(); 
     stringDictionary = new Dictionary<string, string>(); 
     timeDictionary = new Dictionary<string, DateTime>(); 
     //other object creation code 
    } 
} 
+0

duplication possible de [Meilleure pratique: Initialiser les champs de classe dans le constructeur ou à la déclaration?] (Http://stackoverflow.com/questions/24551/best-practice-initialize-class-fields-in-constructor-or-at -déclaration) – Gishu

Répondre

2

Puisque vous avez autre code (« autre code de création d'objet ») dans un constructeur explicite, je préférerais mettre toute l'initialisation là.

4

Je préférerais utiliser le constructeur. Ceci est dû au fait que nous avons découvert cruellement que les objets reconstruits via le sérialiseur (dans ce cas, un sérialiseur de contrat de données) n'avaient pas leurs initialiseurs de champ appelés. En outre, cela garantit que toute la logique d'initialisation est regroupée en conséquence plutôt que d'être potentiellement intercalée dans le code (où vous voulez définir vos variables de champ).