Статический конструктор c # не вызывается из производного класса

StackOverflow https://stackoverflow.com/questions/6390960

Вопрос

общий

Есть идеи, как сделать так, чтобы ссылка на статическое поле в Buss запускала статический конструктор в Bus?

Это было полезно?

Решение

Тот факт, что это важно для вас, вероятно, означает, что вы неправильно используете статические конструкторы.

Имея это в виду, вы можете создать статический конструктор в Buss, который вручную вызывает статический конструктор в Bus.Обратите внимание, что статический конструктор невозможно запустить более одного раза.

Другие советы

MSDN сообщает , что 'Статические конструкторы не наследуются ».Я думаю, это похоже на статические поля, которые тоже не наследуются.

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top