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