Je sais que l'appel d'une méthode virtuelle à partir d'un constructeur de classe de base peut être dangereux depuis la classe fille peut ne pas être dans un état valide. (au moins en C#)
Ma question est ce que si la méthode virtuelle est celui qui initialise l'état de l'objet ? Est il bon de le faire ou faut-il un processus en deux étapes, d'abord à créer l'objet et ensuite à la charge de l'état ?
Première option: (en utilisant le constructeur pour initialiser l'état)
public class BaseObject {
public BaseObject(XElement definition) {
this.LoadState(definition);
}
protected abstract LoadState(XElement definition);
}
Deuxième option: (à l'aide d'un processus en deux étapes)
public class BaseObject {
public void LoadState(XElement definition) {
this.LoadStateCore(definition);
}
protected abstract LoadStateCore(XElement definition);
}
Dans la première méthode, le consommateur, le code permet de créer et d'initialiser l'objet avec une seule instruction:
// The base class will call the virtual method to load the state.
ChildObject o = new ChildObject(definition)
Dans la deuxième méthode, le consommateur devra créer l'objet et à la charge de l'état:
ChildObject o = new ChildObject();
o.LoadState(definition);