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?
Public class?
- Rejestracja: dni
- Ostatnio: dni
- Rejestracja: dni
- Ostatnio: dni
Jak tworzysz klase zagnieżdżoną
public class Employer
{
//jakies tam metody itp
private class EmpName
{//blablalba}
}
To z klasy Employer możesz korzystać wszędzie a z klasy EmpName tylko w klasie Employer.
- Rejestracja: dni
- Ostatnio: dni
Klasa publiczna jest widoczna z innych assembly.
- Rejestracja: dni
- Ostatnio: dni
Ok ale czemu przy klasie Employer jest public? Co gdyby go nie było?
- Rejestracja: dni
- Ostatnio: dni
Signum napisał(a):
Klasa publiczna jest widoczna z innych assembly.
A, ok to juz mi cos mowi
- Rejestracja: dni
- Ostatnio: dni
Domyślnym modyfikatorem klasy jest internal
- Rejestracja: dni
- Ostatnio: dni
Wtedy domyślnie ląduje tam internal i klasa nie jest widoczna z innych assembly.
- Rejestracja: dni
- Ostatnio: dni
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: dni
- Ostatnio: dni
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
przycinanado 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
przycinaniudostę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 :>