Статический конструктор универсального типа вызывается ровно один раз для Type
, когда на этот тип ссылаются.
Вызов Buss x = new Buss()
вызовет статический конструктор Bus<Buss>
.
Вызов Bus<Buss> x = new Bus<Buss>()
также вызовет статический конструктор Bus<Buss>
, но он сделает это для аргумента типа Buss
, установив Buss.field
.
Если вы создадите class Bugs : Bus<Buss>
, он никогда не установит Bugs.field
, поскольку он сначала разрешит аргумент типа Buss
, который вызывает статический конструктор его базового класса Bus<Buss>
, устанавливая Buss.field
. Когда он пытается вызвать статический конструктор базового класса Bugs
, он будет думать, что он уже вызвал статический конструктор Bus<Buss>
и пропустит его.
Обычно, если я копирую, вставляю ваш код, создаю фиктивный класс Argument
и создаю новый экземпляр Buss
, статический конструктор вызывается и Buss.field
- установлен на экземпляр Argument
, но здесь я узнаю странное поведение, в котором я бы посоветовал не использовать отражение от статического метода для достижения статики подклассов.
Приведенный вами пример работает только потому, что Buss
является аргументом типа для себя.