19. Modyfikatory dostępu

19. Modyfikatory dostępu

 Daniel Celeda
Daniel Celeda
00:00
13.06.2006
11 komentarz
52834 wyświetlenia

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 .


Spodobał Ci się ten artykuł? Podziel się z innymi!

Źródło:

Polecamy również w kategorii Kurs C#, cz. I

Komentarze

  • r 09:38 13.06.2006

    Kurs bardzo dobry!

  • Janek 21:41 05.08.2006

    Dlaczego komentarze, do artykułu gromadzone są osobno do każdej z podstron, a nie raz a porządnie wszystkie podspodem bez względu na podstronę? :)

  • SeSo 03:10 29.08.2006

    Zeby mozna bylo komentowac kazdy rozdzial kursu :) A nie zeby sie to wszystko platalo :) POzdrawiam i kurs bardzo dobry :)

  • T 12:09 05.12.2007

    Mozna by juz opisac pozostale.. to nie wiele wiecej.

  • as 22:43 09.12.2007

    a wlasciwosci set i get dla zmiennych private??? po co uczyc sie rzeczy ktorych teraz nikt nie stosuje ??

  • autor 19:33 08.01.2009

    <p>A kolorowanie składni pies zjadł...</p>

  • carck3r 21:57 01.05.2009

    <p>Brak opisu właściwości (get{} i set{}) - niedobrze...</p>

  • xman 21:29 12.09.2009

    <p>Kurs dość dobry, ale wyglada na taki który ktoś musiał zrobić pod przymusem a nie sam z siebie</p>

  • Fox 12:50 06.04.2011

    Świetny kurs !!![img]../tinymce/jscripts/tiny_mce/plugins/emotions/img/smiley-laughing.gif[/img]

  • h 15:31 20.06.2011

    czytam te kursy jako ktoś, kto chce się przesiąć z Javy na C# i uważam, że jest to w sam raz dla mnie. Dzięki :)

  • Rafal 10:55 28.06.2017

    Dokladnie. To jest dla kogos kto np. zna juz Jave i chce przesiac sie na C#.

Skomentuj

Autor