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.
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.
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)
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
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.
Odpowiedzi:
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).
źródło
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.
Odniesienie :
dotnetbull - co to jest modyfikator dostępu w c #
źródło
Protected Internal
zapewnia szerszy dostęp niżProtected
.protected internal
jakprotected OR internal
.With Type
znaczyAND
tej matrycy do true | false | false | falseprotected internal
. nie intuicyjne. zamiast tego jest to prawda | prawda | prawda | fałsz jak gdybyOR'd
.private protected
nie są zbyt intuicyjne. Szczegółowe informacje: docs.microsoft.com/en-us/dotnet/csharp/language-reference/…internal
elementy 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 )private
czł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,
protected
członkowie są jakprivate
czł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)źródło
private - enkapsulacje w klasie / scope / struct ect ”.
wewnętrzna - hermetyzacja w złożeniach.
źródło
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
źródło
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
źródło
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.
źródło