J'ai besoin d'une certaine classe de contenir un membre statique qui garde la trace de chaque fois qu'une instance de cette classe est instanciée, essentiellement, de sorte que chaque instance de la classe a un index unique. Il fonctionne avec un non-classe générique, mais ce générique de la mise en œuvre échoue à chaque fois que le type T diffère entre les instances:
class A<T>
{
private static int counter;
private static int Counter {
get {
Increment();
return counter;
}
}
private static void Increment() {
counter++;
}
public int Index;
public A()
{
this.Index = Counter; // using A<T>.Counter makes no difference
Console.WriteLine(this.Index);
}
}
class Program
{
static void Main(string[] args)
{
var a = new A<string>();
var b = new A<string>();
var c = new A<string>();
var d = new A<int>();
}
}
La sortie est:
1
2
3
1
Dès que le type T des commutateurs de type int au lieu de string, le compteur est remis à zéro.
Est-ce à l'échec de par leur conception, et si oui, quelle est la raison, ou comment puis-je obtenir autour d'elle? Ou est-ce un bug? Elle donne un sens à un certain degré, car le type T, étant générique, est dans la déclaration de classe, mais..