В чем разница между спецификатором доступа защищена
и внутренняя защищена
в C #?
Внутренний
можно увидеть внутри сборки.
Защищенный
можно увидеть по классам, унаследованным от класса, в котором он определен.
Защищенный внутренний
можно увидеть в сборке ИЛИ типы, производные от класса, в котором он определен (включая типы из других сборок).
См .: http://msdn.microsoft.com/en-us/library/ba0a1yw2.aspx
Скопировано со страницы:
public Access is not restricted.
protected Access is limited to the containing class or types derived from the containing class.
internal Access is limited to the current assembly.
protected internal Access is limited to the current assembly or types derived from the containing class.
private Access is limited to the containing type.
protected
означает, что только текущий класс и все классы, производные от него, имеют доступ к члену.
internal
означает, что любой класс в текущей сборке имеет доступ к члену.
защищенный внутренний
по существу означает защищенный
или внутренний
; то есть все классы, производные от текущего класса (в любой сборке), имеют доступ к члену, как и все классы в текущей сборке. Это контрастирует с тем, что ожидают многие разработчики - что protected internal
будет означать то же самое, что и protected
и internal
(это не так).
internal
- Видимая всем, что находится в той же сборке (.dll или .exe). protected
- Видима любым подклассам, независимо от того, где они находятся. internal protected
- Видимы всем, что находится в той же сборке и любыми подклассами, независимо от того, где они находятся. То, как Джефф Мэттфилд говорит "internal дополнительно уменьшает эту видимость", делает это неясным. internal
и protected
- это просто разные видимости. Наличие обоих вместе делает член более видимым. По умолчанию видимость чего-либо, не имеющего явных модификаторов доступа, настолько мала, насколько это возможно. Добавление любых модификаторов доступа всегда увеличивает видимость.
внутренняя защита
или внутренняя защита
, что означает то же самое означает внешнюю защиту
(извне текущей сборки) и внутреннюю общедоступную
(из той же сборки).
внутренняя защита
позволяет вам получать доступ к элементам в одной и той же сборке из классов, которые не являются производными от одного и того же объекта, но также предоставляет стандартный защищенный доступ, который вы получаете для доступа к элементам из другой сборки. Это внутреннее | защищенный, а не внутренний и защищенный (хотя CLR допускает последнее, а C # - нет)