Ответ 1
Поскольку вы не можете наследовать статический класс, protected
не служит цели - только public
и private
имеют смысл здесь.
Подробнее можно найти здесь: Почему я не могу наследовать статические классы?
Я читаю книгу "С# Language" и ударил эту заметку у Владимира Решетникова:
Если статический класс объявляет защищенный или защищенный внутренний член, возникает ошибка времени компиляции (CS1057).
Могу я узнать, почему? Что случилось со статическим классом, имеющим защищенный член? Статический класс может иметь частный член, поэтому я предполагаю, что эта ошибка CS1057 связана не с доступностью, а, возможно, из-за проблемы с компиляцией? поскольку защищенный член может быть переопределен в дочерних классах... но я не мог понять, почему.
Поскольку вы не можете наследовать статический класс, protected
не служит цели - только public
и private
имеют смысл здесь.
Подробнее можно найти здесь: Почему я не могу наследовать статические классы?
Защищенные члены означают, что к ним можно получить доступ из дочерних/производных классов. Но основными особенностями статического класса являются:
содержат только статические элементы;
Невозможно создать экземпляр
Запечатываются.
Вот почему статические классы не могут иметь защищенные члены.
Наследование в .NET работает только на базе экземпляра. Статические методы определяются на уровне типа не на уровне экземпляра. Вот почему переопределение не работает со статическими методами/свойствами/событиями...
Статические методы хранятся только один раз в памяти. Для них нет виртуальной таблицы и т.д.
Если вы вызываете метод экземпляра в .NET, вы всегда даете ему текущий экземпляр. Это скрыто средой выполнения .NET, но это происходит. Каждый метод экземпляра имеет в качестве первого аргумента указатель (ссылку) на объект, над которым запущен метод. Это не происходит со статическими методами (поскольку они определены на уровне типа). Как компилятор должен выбрать способ вызова?
(littleguru)