Как CLR обрабатывает статические классы?
Кто-нибудь может объяснить, как CLR обрабатывает статические классы? Создает ли CLR один одноэлементный экземпляр для внутренней обработки статических классов? Если нет, то почему у нас есть статический конструктор в C#? (Насколько я понимаю, мы используем конструкторы только для создания экземпляров класса)
2 ответа
Во-первых, в CLR нет статического класса. CLR ничего не знает о статическом классе. Это особенность C#.
Статические классы компилируются в abstract
так же как sealed
учебный класс. Делая это abstract
предотвратить его реализацию и sealed
предотвращает наследование.
Статические классы не особенные, это просто простой класс со всеми членами static.
Является ли, CLR внутренне создает один единственный экземпляр для обработки статических классов?
Нет, это абстрактно и не может быть реализовано.
Если нет, то почему у нас есть статический конструктор в C#?
Статический конструктор будет вызываться при первом обращении к типу или его создании. Он используется для инициализации статических членов класса.
static
конструктор вызывается при первом обращении к типу. Это не должно быть static
класс, чтобы иметь static
конструктор.
CLR не создает одноэлементный экземпляр static
учебный класс. Это держит static
переменные в памяти, хотя после того, как они инициализированы.