Мне нужно, чтобы определенный класс содержал статический член, который отслеживает каждый раз, когда создается экземпляр этого класса, по существу, так, чтобы каждый экземпляр класса имел уникальный индекс.Он работает с неуниверсальным классом, но эта универсальная реализация завершается неудачно, когда тип T отличается между экземплярами:
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>();
}
}
Вывод:
1
2
3
1
Как только тип T переключается на int вместо строки, счетчик сбрасывается.
Не получается ли это по замыслу, и если да, то в чем причина или как я могу обойти это?Или это ошибка?В некоторой степени это имеет смысл, потому что тип T, будучи универсальным, находится в объявлении класса, но ..