Проблема здесь на самом деле в том, что «универсальные классы» вообще не являются классами.
Определения универсальных классов - это просто шаблоны для классов, и пока параметры их типов не указаны, они являются лишь частьютекст (или горстка байтов).
Во время выполнения можно указать параметр типа для шаблона, таким образом, приведя его в исполнение и создав класс, теперь полностью определенного типа.Вот почему статические свойства не распространяются на весь шаблон, и поэтому вы не можете приводить значения между List<string>
и List<int>
.
Это отношение как бы отражает отношение класса-объекта.Так же, как классы не существуют * до тех пор, пока вы не создадите из них объект, общие классы не существуют, пока вы не создадите класс на основе шаблона.
PS Вполне возможно объявить
class Foo<T> {
public static T Member;
}
Из этого очевидно, что статические члены не могут быть общими, так как T отличается для разных специализаций.