Modyfikatory dostępu wewnętrznego i prywatnego

Odpowiedzi:

516

wewnętrzny jest dla zakresu zestawu (tj. dostępny tylko z kodu w tym samym pliku .exe lub .dll)

private jest dla zakresu klasy (tj. dostępne tylko z kodu w tej samej klasie).

poszukiwacz
źródło
6
mam szybkie pytanie; jeśli zadeklaruję klasę jako prywatną w przestrzeni nazw w zestawie a klasę wewnętrzną, mogę uzyskać dostęp do tej klasy w zestawie w obu przypadkach, to jaka jest różnica między klasą prywatną a klasą wewnętrzną? lub czy modyfikatory prywatne i wewnętrzne pod względem klas są używane podczas zagnieżdżania klasy w klasie?
majotyczny
2
dodałem konkretny projekt / zestawienie jako odniesienie do innego projektu i zarówno prywatny, jak i wewnętrzny uniemożliwiają mi dostęp do tej konkretnej klasy w przestrzeni nazw, więc znowu ... różnica między klasami prywatnymi i wewnętrznymi jest? dzięki
majotyczny
9
Nie można zadeklarować klasy najwyższego poziomu jako prywatnej. Kompilator Cię zatrzyma.
TheGateKeeper
6
@NetSkay: Jeśli zadeklarujesz klasę prywatną w klasie publicznej, klasa ta nie będzie dostępna dla innych klas w zestawie, ale jeśli zadeklarujesz tę klasę jako wewnętrzną, będzie ona dostępna w zestawie. Chociaż oba nie będą dostępne poza zestawem.
Yogesh Jindal
2
Jeśli pochodzisz z tła VB.NET, „wewnętrzne” słowo kluczowe C # jest równoważne słowu kluczowemu „Friend” VB.NET.
Brain2000
207

Znajdź wyjaśnienie poniżej. Możesz sprawdzić ten link, aby uzyskać więcej informacji - http://www.dotnetbull.com/2013/10/public-protected-private-internal-access-modifier-in-c.html

Prywatne: - Członkowie prywatni są dostępni tylko w ramach własnego typu (własna klasa).

Wewnętrzne: - Element wewnętrzny jest dostępny tylko w zespole przez dziedziczenie (typ pochodny) lub przez instancję klasy.

wprowadź opis zdjęcia tutaj

Odniesienie :

dotnetbull - co to jest modyfikator dostępu w c #

Vivek
źródło
17
Interesujące, że Protected Internalzapewnia szerszy dostęp niż Protected.
Dan Bechard
9
@ Dan, całkowicie się zgadzam. Może to być pomocne, aby przeczytać i pomyśleć protected internaljak protected OR internal.
chessofnerd
7
Co With Typeznaczy
James Wierzba
@Dan Tak, zakłada się, że to po prostu działać jako tabeli prawdy i ANDtej matrycy do true | false | false | false protected internal. nie intuicyjne. zamiast tego jest to prawda | prawda | prawda | fałsz jak gdyby OR'd.
Ferr
1
Nawiasem mówiąc, C # 7.2 właśnie dodał modyfikator „chroniony ORAZ wewnętrzny”, chociaż wybrane słowa kluczowe private protectednie są zbyt intuicyjne. Szczegółowe informacje: docs.microsoft.com/en-us/dotnet/csharp/language-reference/…
Joe Sewell
70

internalelementy są widoczne dla całego kodu w zestawie, w którym są zadeklarowane.
(I dla innych zestawów, do których odwołuje się ten [InternalsVisibleTo]atrybut )

privateczłonkowie są widoczni tylko dla klasy deklarującej. (w tym zagnieżdżone klasy)

Zewnętrzna (nie zagnieżdżona) klasa nie może zostać zadeklarowana private, ponieważ nie ma w niej zawartego zakresu, który mógłby uczynić ją prywatną.

Aby odpowiedzieć na pytanie, o którym zapomniałeś zadać pytanie, protectedczłonkowie są jak privateczłonkowie, ale są również widoczni we wszystkich klasach dziedziczących typ deklarujący. (Ale tylko po wyrażeniu co najmniej typu bieżącej klasy)

SLaks
źródło
8

private - enkapsulacje w klasie / scope / struct ect ”.

wewnętrzna - hermetyzacja w złożeniach.

Yaniv Lugassy
źródło
6

Członkowie prywatni są dostępni tylko w ciele klasy lub strukturze, w której są zadeklarowani.

Typy wewnętrzne lub elementy są dostępne tylko w plikach w tym samym zestawie

Jesper Fyhr Knudsen
źródło
więc jaka jest różnica w korzystaniu z tego? wciąż nie rozumiem: X
Deadfish
4
Prywatne są dostępne tylko z poziomu klasy, wewnętrzne są dostępne z poziomu zestawu (projekt w VS tj. Plik dll / exe).
Jesper Fyhr Knudsen
3

Wewnętrzne pozwolą na odniesienie, powiedzmy, statycznej klasy Dostęp do danych (dla bezpieczeństwa wątków) między wieloma klasami logiki biznesowej, bez subskrybowania ich w celu dziedziczenia tej klasy / tripu nad sobą w pulach połączeń, i ostatecznie unikając dopuszczenia klasy DAL promowanie dostępu na poziomie publicznym. Ma to niezliczone wsparcie w zakresie projektowania i najlepszych praktyk.

Entity Framework dobrze wykorzystuje ten typ dostępu

Nathan Teague
źródło
0

elementy wewnętrzne są dostępne w zespole (dostępne tylko w tym samym projekcie)

członkowie prywatni są dostępni w ramach tej samej klasy

Przykład dla początkujących

W rozwiązaniu są 2 projekty (Project1, Project2), a Project1 ma odniesienie do Project2.

  • Metoda publiczna napisana w Project2 będzie dostępna w Project2 i Project1
  • Metoda wewnętrzna napisana w Project2 będzie dostępna tylko w Project2, ale nie w Project1
  • Metoda prywatna napisana w klasie 1 Projektu 2 będzie dostępna tylko dla tej samej klasy. Nie będzie dostępny w innych klasach Projektu 2, nie w Projekcie 1.
Salik
źródło