Co w C# oznacza public przy klasie?
Rozumiem, ze public przy zmiennej lub przy metodzie powoduje ze jest ona widoczna na zewnatrz klasy.
Ale co robi public przy class?
0
Ok ale czemu przy klasie Employer jest public? Co gdyby go nie było?

Domyślnie byłaby publiczna.
0
Signum napisał(a):
Klasa publiczna jest widoczna z innych assembly.
A, ok to juz mi cos mowi
- Rejestracja:około 18 lat
- Ostatnio:11 miesięcy
1
Jeżeli klasa albo struktura są zdefiniowane bezpośrednio w przestrzeni nazw to dostają modyfikator internal
. Jeżeli są zagnieżdżone w innej klasie albo strukturze to domyślnym modyfikatorem dostępu jest private
!

- Rejestracja:prawie 16 lat
- Ostatnio:4 miesiące
5
Takie podsumowanie, bo pojawiło się kilka sprzecznych informacji, z czego parę błędnych.
- Przed klasą mogą pojawić się modyfikatory: public (zawsze), internal (zawsze), private (tylko w zagnieżdżonych), protected (tylko w zagnieżdżonych) oraz protected internal (tylko w zagnieżdżonych)
- Brak modyfikatora jest równoważny
internal
, chyba że klasa jest zagnieżdżona - wtedy domyślny jestprivate
. - Klas oznaczonych jako public można używać z dowolnego innego programu .NETowego - tzn. jeśli tworzymy bibliotekę i chcemy pozwolić osobom używającym biblioteki tworzyć nasze klasy należy użyć modyfikatora public.
- Klasy internal są dostępne tylko w tym projekcie w którym są zdefiniowane. Jeśli nie tworzymy biblioteki albo mamy w bibliotece klasę pomocniczą, nie do używania dla innych, oznaczamy ją jako internal
- Klasy private można tworzyć jedynie wewnątrz innych klas. Dostęp do nich jest możliwy tylko z klasy zawierającej. Rzadko przydatne, lepiej się tym nie martwić na początku.
- Klasy protected są dostępne wewnątrz klasy zawierającej i dziedziczących z niej. Praktycznie nieprzydatne, stosowanie może oznaczać że z kodem jest coś nie tak.
- Klasy protected internal - suma dostępności protected i internal. Stosowanie tego to musi być niezła zabawa w konkursach na poryty kod.
- Struktury można oznaczać modyfikatorami public i internal.
- Zagnieżdżone struktury można oznaczać modyfikatorami public, internal i private.
- Dziedziczone klasy nie mogą mieć większej dostępności niż klasy bazowe.
- Jeśli klasa ma mniejszą dostępności (np. internal) niż jej metoda (np. public), to metoda jest
przycinana
do dostępności klasy (czyli staje się internal w tym przypadku) - I ostatnia pułapka: jeśli metoda M ma większą dostępność (np. public - patrz punkt powyżej o
przycinaniu
dostępu) niż klasa B (np. internal), to metoda M nie może zwracać bezpośrednio obiektu klasy B.public class A { public B Foo() { return null; } } class B { }
- nie zadziała.
To chyba tyle o modyfikatorach dostępu :>