Bonjour,
Appeler une méthode ou un contructeur de base depuis une classe dérivée, c'est facile (avec le mot clé base), mais là c'est l'inverse :
Je développe une classe abstraite (donc destinée uniquement à servir de classe de base), mais pour l'une des méthodes, j'ai besoin de retourner une nouvelle instance de la classe dérivée. (Je ne peux créer une nouvelle instance de la classe de base car elle est abstraite, et même si elle ne l'était pas, un sub-transtypage brutal vers une classe plus évolué serait invalide car cette classe plus évoluée n'aurait pas été construite
J'avais pensé à l'obligation de founir le type en paramètre, mais après qu'en faire ?
J'ai aussi pensé à ceci :
Ce qui impose dans la classe dérivée :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 public abstract MaBase(){ protected abstact MaBase CreateNewClasse(); public MaBase MaMethode(){ MaBase ToReturn = CreateNewClasse(); .... return ToReturn; } public MaBase (){ ... } }
Mais je pense qu'il doit y avoir plus simple ... J'ai le sentiment de faire fausse route.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 public MaClasseDerivee : MaBase { protected override MaBase CreateNewClasse(){ return (MaBase) new MaClasseDerivee(); } }
Partager