Мне нужен определенный класс, содержащий статический член, который отслеживает каждый раз, когда создается экземпляр этого класса, по сути, чтобы каждый экземпляр класса имел уникальный индекс. Он работает с неуниверсальным классом, но эта универсальная реализация терпит неудачу всякий раз, когда тип 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, являющийся универсальным, находится в объявлении класса, но ..