Почему эта статическая переменная не увеличивается при использовании дженериков?

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

28
задан Sean Thoman 15 November 2011 в 22:34
поделиться