W C# wszystkie metody oraz zmienne muszą być składowymi klas lub struktur. Każda ze składowych ma określony poziom dostępu. Za określenie tego poziomu odpowiedzialne są modyfikatory dostępu, które poprzedzają składowe klasy.
Modyfikatory oraz ich opis:
public – czyni składową dostępna dla innych klas,
private – czyni składową dostępna tylko z klasy, która tę składową zdefiniowała.
Oprócz dwóch powyższych istnieją jeszcze trzy inne, którymi na razie nie będziemy się zajmować – protected, internal, protected internal.
Czas na przykłady.
class Echo
{
public string napis;
public void Napisz()
{
System.Console.WriteLine(napis);
}
}
class KlasaGlowna
{
static void Main()
{
Echo obiekt = new Echo();
obiekt.napis = "Zawartość zmiennej napis.";
obiekt.Napisz();
System.Console.ReadLine();
}
}
Zmienna “napis” to składowa klasy “Echo”. Posiada ona modyfikator „public”, czyli możliwe jest zapisywanie do tej zmiennej oraz odczytywanie z niej wartości z poziomu innych klas.
Linijka:
obiekt.napis = "Zawartość zmiennej napis.";
znajduje się w metodzie „Main()” klasy „KlasaGlowna” jednak możemy ją wykonać, ponieważ zmienna „napis” ma modyfikator „public”.
Co się stanie jeśli modyfikator „public” zamienimy na „private”? Przekonajmy się.
class Echo
{
private string napis;
public void Napisz()
{
System.Console.WriteLine(napis);
}
}
class KlasaGlowna
{
static void Main()
{
Echo obiekt = new Echo();
obiekt.napis = "Zawartość zmiennej napis.";
obiekt.Napisz();
System.Console.ReadLine();
}
}
Podczas kompilacji otrzymujemy komunikat o błędzie:
'Echo.napis' is inaccessible due to its protection level
Błąd został wygenerowany, ponieważ próbowaliśmy “dostać się” do zmiennej z poziomu innej klasy niż ta, w której zmienna została zadeklarowana oraz zmienna ta ma modyfikator “private”.
W jakim celu, więc używać modyfikatora „private”? Używamy go po to żeby ograniczyć dostęp do jakiejś składowej. Przyjęło się, że zmienne zawsze mają modyfikator „private”, a ich wartości ustalamy poprzez publiczne metody (metody z modyfikatorem „public”). Wraz z pojawieniem się języka C# zaczęto używać właściwości (properties) – odpowiedników publicznych metod do pobierania i ustawiania wartości zmiennym prywatnym (jest to zalecany sposób). Na razie jednak używać będziemy metod.
class Echo
{
private string napis;
public void PrzypiszWartosc(string nowaWartosc)
{
napis = nowaWartosc;
}
public void Napisz()
{
System.Console.WriteLine(napis);
}
}
class KlasaGlowna
{
static void Main()
{
Echo obiekt = new Echo();
obiekt.PrzypiszWartosc("Przypisany tekst");
obiekt.Napisz();
System.Console.ReadLine();
}
}
Jeśli nie zadeklarujemy modyfikatora dostępu dla składowej klasy to domyślnie przyjętym będzie „private”. Musimy także zapamiętać, że modyfikatorów używamy tylko dla składowych klasy a nie dla zmiennych lokalnych, czyli takich które deklarujemy tylko wewnątrz jakiejś metody .