По-прежнему существует большая путаница в понимании области действия «защищенных внутренних» методов доступа, хотя у большинства это определение определено правильно. Это помогло мне понять путаницу между «защищенным» и «защищенным внутренним»:
public действительно публично внутри и снаружи сборки ( public internal / public external )
защищенный действительно защищен внутри и снаружи сборки ( защищенный внутренний / защищенный внешний ) (не допускается в классах верхнего уровня)
private действительно закрыт внутри и снаружи сборки ( private internal / private external ) (не разрешено в классах верхнего уровня)
внутренняя действительно общедоступна внутри сборки, но исключена вне сборки, как частная ( публичная внутренняя / исключена внешняя )
защищенный внутренний действительно открыт внутри сборки, но защищен вне сборки ( открытый внутренний / защищенный внешний )
(не разрешено на уроках высшего уровня)
Как видите, внутренняя защита - очень странный зверь. Не интуитивно.
Теперь возникает вопрос, почему Microsoft не создала ( защищенный внутренний / исключенный внешний ), или я полагаю, что-то вроде "частной защиты" или "внутренней защиты"? лол. Кажется неполным?
К путанице добавлен тот факт, что вы можете вкладывать открытые или защищенные внутренние вложенные элементы внутри защищенного, внутреннего или закрытого типов. Зачем вам доступ к вложенному «защищенному внутреннему» внутри внутреннего класса, который исключает внешний доступ к сборке?
Microsoft говорит, что такие вложенные типы ограничены областью их родительского типа, но это не то, что говорит компилятор. Вы можете скомпилировать защищенные внутренние компоненты внутри внутренних классов, которые должны ограничивать область действия только сборкой.
Мне кажется, что это неполный дизайн. Они должны были упростить область действия всех типов до системы, которая четко учитывает наследование, а также безопасность и иерархию вложенных типов. Это сделало бы совместное использование объектов чрезвычайно интуитивно понятным и детальным, а не открыло бы доступность типов и элементов на основе неполной системы определения объема.