Видимість за замовчуванням для класів та членів C # (поля, методи тощо)?


164

Я намагаюся знайти посилання на видимість за замовчуванням різних аспектів C #. Типи класів, поля, методи, перерахунки тощо.

Чи може хтось надати перелік цих даних разом із видимістю за замовчуванням (тобто немає попередньо встановленого модифікатора)?


можливий дублікат модифікатора доступу
Jeff Sternal,

8
Я б не вважав це дублікатом ... це питання є специфічним (Що за замовчуванням ЦЕ?), Це широке питання (Що ВСЕ за замовчуванням?)
WernerCD,

Відповіді:


266

Всю інформацію, яку ви шукаєте, можна знайти тут і тут (спасибі Рід Копсі ):

З першого посилання:

Класи та структури , які оголошуються безпосередньо в просторі імен (іншими словами, які не вкладені в інші класи або структури), можуть бути публічними або внутрішніми. Внутрішнє значення є типовим, якщо не вказаний модифікатор доступу .

...

Рівень доступу для членів класу та членів структури , включаючи вкладені класи та структури, за замовчуванням є приватним .

...

інтерфейси за замовчуванням для внутрішнього доступу.

...

Делегати поводяться як класи та структури. За замовчуванням вони мають внутрішній доступ при оголошенні безпосередньо в просторі імен та приватний доступ, коли вони вкладені .


З другого посилання:

Типи верхнього рівня , які не вкладені в інші типи, можуть мати лише внутрішню або загальнодоступну доступність. Доступність за замовчуванням для цих типів є внутрішньою .

А для вкладених типів:

Доступ до користувачів за замовчуванням
---------- ----------------------------
перераховувати публічно
клас приватний
інтерфейс загальнодоступний
структура приватна

6
Приємна збірка з інформації Ріда, але ви забули вказати, що такі модифікатори доступу застосовуються і до методів.
Джоель

4
@Joel Що ти маєш на увазі? Він чітко заявляє про "членів". Члени мають дані та поведінку і, таким чином, включають методи.
rism

Якщо будь-який розробник vb.net дивиться на це, vb відрізняється. Область за замовчуванням для членів класу vb - Public. Enumчлени також Public. Можливо, менш заплутаним є використання явного простору у вашому випадку, оскільки шанси високі, вони будуть переведені чи прочитані розробниками c # в якийсь момент. На жаль, генерація коду в vb.net не робить цього для вас.
Тоддмо

Додам, що вкладений інтерфейс у класі за замовчуванням приватний, а не внутрішній.
Френк Брайс

13

Від MSDN:

Типи верхнього рівня , які не вкладені в інших типах, можуть тільки мати internalабо publicдоступність. Для цих типів доступність за замовчуванням є internal.


Вкладені типи , які є членами інших типів, можуть заявляти про доступність, як зазначено в наступній таблиці.

Доступність для вкладених користувачів за замовчуванням та дозволені модифікатори доступності

Джерело: Доступність Рівні (C #) (6 грудня - е 2017)


9

За замовчуванням модифікатор доступу для класу є internal. Це означає, що клас доступний в межах однієї збірки. Але якщо ми хочемо, щоб до нього можна було отримати доступ з інших збірок, то він повинен бути оприлюднений.


19
Ця інформація була присутня в інших відповідях. Ви повинні відповісти на запитання, особливо на старе, таке як таке, коли у вас є додаткова інформація, яку потрібно надати, або ви думаєте, що інші відповіді невірні. У будь-якому випадку, ласкаво просимо до Stack Overflow.
Горпик

Клас не обов'язково повинен бути оприлюднений, щоб бути доступним для інших зборів. Можна було б використовувати клас InternalsVisibleToAttribute[assembly:InternalsVisibleTo("Friend1b")]
adam

0

За замовчуванням є private. Якщо вони не вкладені, заняття є internal.


1
за замовчуванням не є загальнодоступними?
Райан Пітерс

4
@Jay: Якщо вони не вкладені. @Ryan: Ні, вкладені перерахунки за замовчуванням є внутрішніми.
Джон Скіт

2
@Ryan: Учасники Enum за замовчуванням публічні, але сам enum внутрішній.
Рід Копсей

@ReedCopsey Але книга, з якої я навчаюсь, чітко говорить про це enum members are private by default, so to use them outside the enum we should declare them as public. Чи можете ви пояснити, чому книга суперечить тому, що ви говорите? Дякую.

Що б книжка @ user5794376 (чітко видалений обліковий запис) читалася, слід дати всі 1-зіркові відгуки, якщо те, що вони говорять, у книзі правдиве. Потрібно лише переглядати документи Документів Microsoft, щоб знати, що члени перерахунків за замовчуванням є загальнодоступними, і тому звичайна практика для переліків лише не явна на них.
Родні С. Фолі
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.