2010-06-22 3 views

Répondre

1

Je suppose que vous parlez d'autres fonctions privées/publiques de la classe en cours d'initialisation.

Comme partout ailleurs, je dirais que la décomposition de grands comportements compliqués en sous-fonctions est une bonne pratique.

La complication évidente serait l'appel de fonctions qui reposent sur le contenu non initialisé de l'objet. Puisque le constructeur et les autres fonctions sont dans la classe ont la même visibilité (du point de vue de la maintenabilité du code) je ne pense pas qu'il soit déraisonnable de dire qu'il est correct de tirer parti d'autres fonctions mais nécessaire pour le programmeur pour s'assurer que de telles dépendances circulaires sont évitées (comme les fonctions virtuelles).

1

Je place parfois un appel init() dans le constructeur de mes objets si j'ai beaucoup d'autres versions surchargées du constructeur qui ont besoin d'initialiser la classe de la même manière. C'est sec.

0

Pas si ces méthodes sont virtuelles. Quoi qu'il en soit, assurez-vous que si votre constructeur échoue (ou que l'une des méthodes qu'il appelle échoue) que votre constructeur fasse un "catch" pour effectuer un Dispose() sur tous les IDisposables qu'il a alloués.

+0

... et n'oubliez pas de relancer l'exception. –

+0

Merci pour la réponse les gars.La raison pour laquelle j'ai posé cette question est le livre de directives de conception de cadre dit que constructeur devrait être aussi simple que possible ne devrait être utilisé pour initialiser but.Mais si je dois définir certaines propriétés de la base de données créer une instance de la classe.Si j'ai une classe de projet.Je veux créer une instance de classe en passant un paramètre projectid dans la classe construtor comme Project proj = new Project (projectid); alors je veux vérifier la propriété proj.HasForecasts. qui est défini à partir de la base de données. puis-je définir cette propriété en appelant une méthode du constructeur? – SRK

+0

Oui, vous pourriez faire ce travail dans un constructeur, bien que je pourrais envisager d'utiliser une méthode statique "Create" sur la classe Project à la place. –

Questions connexes