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 :

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
{
}
Ce code fonctionne jusqu'à MyClass2 car on hérite de MyClass1<MyClass2> et donc T dans MyClass1<T> désigne bien MyClass2.
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.