Bonjour,
J'ai une série de classes qui héritent les une des autres. Je voudrais que ces classes soient instanciables depuis une méthode statique, un peu à la manière d'un singleton, sauf que je stock mes instances dans un Dictionary<int, T> où la clé est un id passé en paramètre à la méthode statique et T le type de la classe. J'aimerais déclarer cette méthode static et ce dictionary seulement dans une classe ancêtre. Par exemple, j'ai :
Ce code fonctionne jusqu'à MyClass2 car on hérite de MyClass1<MyClass2> et donc T dans MyClass1<T> désigne bien MyClass2.
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
18
19
20
21
22
23
24
25
26
27
28
29
30 public abstract class MyClass1<T> where T : new() { protected Dictionary<int, T> _Instances = new Dictionaryint, T>(); public static T GetInstance(int id) { T result; if (!_Instances.TryGetValue(id, out result)) { result = new T(); _Instances.Add(id, result); } return result; } } public class MyClass2 : MyClass1<MyClass2> { } public class MyClass3 : MyClass2 { } ... public class MyClassN : MyClassN-1 { }
Par contre dans MyClass3, qui hérite de MyClass2, le type T des membre de de MyClass1<T> est toujours MyClass2 alors que je voudrais que ça soit MyClass3.
En clair je cherche un moyen dans ma classe de base de dire que T désigne le type de la dernière classe héritée, ceci afin d'éviter de répéter les membre _Instances et GetInstance() dans chacune des classes.
Auriez-vous une solution/un design pattern à me proposer ?
Merci d'avance.
Partager