Nie uważałbym tego za duplikat ... to pytanie jest konkretne (Jakie jest domyślne ustawienie TEGO?), To jest szerokie (Jakie są WSZYSTKIE wartości domyślne?)
Klasy i struktury, które są zadeklarowane bezpośrednio w przestrzeni nazw (innymi słowy, które nie są zagnieżdżone w innych klasach lub strukturach) mogą być publiczne lub wewnętrzne. Wewnętrzny jest wartością domyślną, jeśli nie określono modyfikatora dostępu .
...
Poziom dostępu dla członków klas i elementów członkowskich struktur , w tym klas zagnieżdżonych i struktur, jest domyślnie prywatny .
...
interfejsy domyślnie obsługują dostęp wewnętrzny .
...
Delegaci zachowują się jak klasy i struktury. Domyślnie mają dostęp wewnętrzny, gdy są zadeklarowane bezpośrednio w przestrzeni nazw, i dostęp prywatny, gdy są zagnieżdżone .
Z drugiego linku:
Typy najwyższego poziomu , które nie są zagnieżdżone w innych typach, mogą mieć tylko wewnętrzną lub publiczną dostępność. Domyślny dostępność dla tych typów jest wewnętrzne .
A dla typów zagnieżdżonych:
Członkowie domyślnej dostępności członków
---------- ----------------------------
enum public
klasa prywatna
interfejs publiczny
struktura prywatna
Niezła kompilacja z informacji Reeda, ale zapomniałeś określić, że takie modyfikatory dostępu mają również zastosowanie do metod.
Joel
4
@Joel Co masz na myśli? Wyraźnie stwierdza, że „członkowie”. Członkowie są danymi i zachowaniem, a zatem obejmują metody.
rism
Jeśli spojrzy na to jakikolwiek programista vb.net, vb jest inny. Domyślny zakres dla członków klasy vb to Public. Enumczłonkowie są również Public. Prawdopodobnie mniej mylące jest po prostu użycie jawnego zakresu w twoim przypadku, ponieważ istnieje duże prawdopodobieństwo, że zostanie on przetłumaczony lub odczytany przez programistów C # w pewnym momencie. Niestety generowanie kodu w vb.net nie robi tego za Ciebie.
toddmo
Dodam, że zagnieżdżony interfejs w klasie jest domyślnie prywatny, a nie wewnętrzny.
Frank Bryce
13
Z MSDN:
Typy najwyższego poziomu , które nie są zagnieżdżone w innych typach, mogą mieć tylko internallub publicułatwienia dostępu. Domyślna dostępność dla tych typów to internal.
Typy zagnieżdżone , które są członkami innych typów, mogą mieć zadeklarowane ułatwienia dostępu, jak pokazano w poniższej tabeli.
Domyślnie modyfikatorem dostępu dla klasy jest internal. Oznacza to, że klasa jest dostępna w ramach tego samego zestawu. Ale jeśli chcemy, aby klasa była dostępna z innych zestawów, musi zostać upubliczniona.
Ta informacja była już obecna w innych odpowiedziach. Na pytanie, szczególnie stare, takie jak to, odpowiadaj tylko wtedy, gdy masz dodatkowe informacje do udzielenia lub uważasz, że inne odpowiedzi są błędne. W każdym razie witaj w Stack Overflow.
Gorpik,
Klasa niekoniecznie musi być upubliczniona, aby była dostępna dla innych zestawów. Można by użyć klasy InternalsVisibleToAttribute[assembly:InternalsVisibleTo("Friend1b")]
adam
0
Domyślnie jest to private. O ile nie są zagnieżdżone, klasy są internal.
@Jay: Chyba że są zagnieżdżone. @Ryan: Nie, niezagnieżdżone wyliczenia są domyślnie wewnętrzne.
Jon Skeet
2
@Ryan: Członkowie wyliczenia są domyślnie publiczne, ale samo wyliczenie jest wewnętrzne.
Reed Copsey
@ReedCopsey Ale książka, z której się uczę, wyraźnie to mówi enum members are private by default, so to use them outside the enum we should declare them as public. Czy możesz wyjaśnić, dlaczego książka jest sprzeczna z tym, co mówisz? Dzięki.
Cokolwiek czyta książka @ user5794376 (wyraźnie usunięte konto), powinna otrzymać wszystkie 1-gwiazdkowe recenzje, jeśli to, co mówią w książce, jest prawdą. Wystarczy spojrzeć na Microsoft Docs, aby wiedzieć, że elementy członkowskie wyliczenia są domyślnie publiczne i dlatego powszechną praktyką jest, aby wyliczenia nie były na nich jawne.
Odpowiedzi:
Wszystkie poszukiwane informacje można znaleźć tutaj i tutaj (dzięki Reed Copsey ):
Od pierwszego linku:
...
...
...
Z drugiego linku:
A dla typów zagnieżdżonych:
źródło
Public
.Enum
członkowie są równieżPublic
. Prawdopodobnie mniej mylące jest po prostu użycie jawnego zakresu w twoim przypadku, ponieważ istnieje duże prawdopodobieństwo, że zostanie on przetłumaczony lub odczytany przez programistów C # w pewnym momencie. Niestety generowanie kodu w vb.net nie robi tego za Ciebie.Z MSDN:
Typy najwyższego poziomu , które nie są zagnieżdżone w innych typach, mogą mieć tylko
internal
lubpublic
ułatwienia dostępu. Domyślna dostępność dla tych typów tointernal
.Typy zagnieżdżone , które są członkami innych typów, mogą mieć zadeklarowane ułatwienia dostępu, jak pokazano w poniższej tabeli.
Źródło: Poziomy dostępu (C # odniesienia) (06 grudnia th , 2017)
źródło
Domyślnie modyfikatorem dostępu dla klasy jest
internal
. Oznacza to, że klasa jest dostępna w ramach tego samego zestawu. Ale jeśli chcemy, aby klasa była dostępna z innych zestawów, musi zostać upubliczniona.źródło
[assembly:InternalsVisibleTo("Friend1b")]
Domyślnie jest to
private
. O ile nie są zagnieżdżone, klasy sąinternal
.źródło
enum members are private by default, so to use them outside the enum we should declare them as public
. Czy możesz wyjaśnić, dlaczego książka jest sprzeczna z tym, co mówisz? Dzięki.