Статический конструктор универсального типа вызывается ровно один раз для каждого 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
является аргументом типа для себя.
person
C.Evenhuis
schedule
17.06.2011