Модифікатори внутрішнього та приватного доступу


Відповіді:


516

внутрішній призначений для сфери складання (тобто доступний лише з коду в тому ж .exe або .dll)

private призначений для сфери застосування класу (тобто доступний лише з коду того ж класу).


6
у мене швидке запитання; якщо я оголошую клас приватним у просторі імен у межах збірки проти класу, який є внутрішнім, я можу отримати доступ до цього класу в межах збірки в обох випадках, то яка різниця між приватним класом і внутрішнім класом? або це приватні та внутрішні модифікатори з точки зору класів, які використовуються при вкладенні класу в межах класу?
майотична

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

9
Ви не можете оголосити клас вищого рівня приватним. Компілятор зупинить вас.
TheGateKeeper

6
@NetSkay: Якщо ви оголошуєте приватний клас всередині загальнодоступного класу, то цей клас недоступний для інших класів у вашій асамблеї, але якщо ви оголошуєте цей клас як внутрішній, він буде доступний у збірці. Хоча вони обидва не будуть доступні поза збіркою.
Йогеш Джиндал

2
Якщо ви перебуваєте з фоном VB.NET, "внутрішнє" ключове слово C # еквівалентне ключовому слову VB.NET "Друг".
Brain2000

207

Знайдіть пояснення нижче. Ви можете ознайомитися з цим посиланням для отримання більш детальної інформації - http://www.dotnetbull.com/2013/10/public-protected-private-internal-access-modifier-in-c.html

Приватний: - До приватних членів доступні лише власні типи (власний клас).

Внутрішній: - Внутрішній член доступний лише у складі за спадщиною (його похідний тип) або за екземпляром класу.

введіть тут опис зображення

Довідка:

dotnetbull - що таке модифікатор доступу в c #


17
Цікаво, що Protected Internalзабезпечує ширший доступ, ніж Protected.
Дан Бешард

9
@Dan, ретельно погоджуйся. Це може бути корисно прочитати і подумати про protected internalце protected OR internal.
chessofnerd

7
Що With Typeозначає?
Джеймс Wierzba

@ Так, я припустив, що він буде просто виконувати таблицю істинності, і ANDце матриця до справжнього | false | false | false protected internal. не інтуїтивно зрозумілий. натомість це правда | правда | правда | хибність, як ніби OR'd.
ferr

1
До речі, C # 7.2 щойно додав модифікатор "захищеного та внутрішнього", хоча фактично вибрані ключові слова private protectedне дуже інтуїтивно зрозумілі. Докладніше: docs.microsoft.com/en-us/dotnet/csharp/language-reference/…
Joe Sewell

70

internalчлени видно всім кодом у складі, в якому вони оголошені.
(І для інших збірок, на які посилається [InternalsVisibleTo]атрибут )

privateчлени видно лише класу, що декларує. (включаючи вкладені класи)

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

Щоб відповісти на запитання, яке ви забули задати, protectedчлени схожі на privateчленів, але їх також видно в усіх класах, які успадковують тип оголошення. (Але лише на виразі принаймні типу поточного класу)


8

private - інкапсуляція у класі / обсязі / структурі.

внутрішній - інкапсуляція в збори.


6

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

Внутрішні типи або члени доступні лише у файлах однієї збірки


так яка різниця у використанні цього? я все ще не розумію: X
мертвий риб

4
Приватні доступні лише в межах класу, внутрішні доступні в межах асамблеї (проект у VS, тобто, файл dll / exe).
Jesper Fyhr Knudsen

3

Внутрішній дозволить вам посилатися, скажімо, на статичний клас доступу до даних (для безпеки потоку) між декількома класами бізнес-логіки, при цьому не підписуючи їх на спадкування цього класу / подорожі один над одним у пулах підключення, і в кінцевому рахунку уникати дозволу класу DAL сприяти доступу на громадському рівні. Це має незліченну кількість дизайну та кращих практик.

Entity Framework добре використовує цей тип доступу


0

внутрішні члени доступні в межах зборів (доступні лише в тому ж проекті)

приватні члени доступні в межах одного класу

Приклад для початківців

У рішенні є 2 проекти (Project1, Project2), а Project1 має посилання на Project2.

  • Публічний метод, написаний у Project2, буде доступний у Project2 та Project1
  • Внутрішній метод, написаний у Project2, буде доступний лише в Project2, але не в Project1
  • приватний метод, записаний у class1 Project2, буде доступний лише тому ж класу. Він не буде доступний ні в інших класах Проекту 2, ні в проекті 1.
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.