Подтвердить что ты не робот

Статический класс, объявляющий защищенного члена

Я читаю книгу "С# Language" и ударил эту заметку у Владимира Решетникова:

Если статический класс объявляет защищенный или защищенный внутренний член, возникает ошибка времени компиляции (CS1057).

Могу я узнать, почему? Что случилось со статическим классом, имеющим защищенный член? Статический класс может иметь частный член, поэтому я предполагаю, что эта ошибка CS1057 связана не с доступностью, а, возможно, из-за проблемы с компиляцией? поскольку защищенный член может быть переопределен в дочерних классах... но я не мог понять, почему.

4b9b3361

Ответ 2

Защищенные члены означают, что к ним можно получить доступ из дочерних/производных классов. Но основными особенностями статического класса являются:

  • содержат только статические элементы;

  • Невозможно создать экземпляр

  • Запечатываются.

Вот почему статические классы не могут иметь защищенные члены.

Ответ 3

Наследование в .NET работает только на базе экземпляра. Статические методы определяются на уровне типа не на уровне экземпляра. Вот почему переопределение не работает со статическими методами/свойствами/событиями...

Статические методы хранятся только один раз в памяти. Для них нет виртуальной таблицы и т.д.

Если вы вызываете метод экземпляра в .NET, вы всегда даете ему текущий экземпляр. Это скрыто средой выполнения .NET, но это происходит. Каждый метод экземпляра имеет в качестве первого аргумента указатель (ссылку) на объект, над которым запущен метод. Это не происходит со статическими методами (поскольку они определены на уровне типа). Как компилятор должен выбрать способ вызова?

(littleguru)