C # - hermetyzacja

Encapsulationdefiniuje się jako „proces zamykania jednego lub więcej elementów w pakiecie fizycznym lub logicznym”. Hermetyzacja w metodyce programowania obiektowego uniemożliwia dostęp do szczegółów implementacji.

Abstrakcja i hermetyzacja to powiązane funkcje w programowaniu obiektowym. Abstrakcja pozwala na uwidocznienie istotnych informacji, a hermetyzacja umożliwia programiście wdrożenie pożądanego poziomu abstrakcji .

Hermetyzacja jest implementowana przy użyciu access specifiers. Naaccess specifierdefiniuje zakres i widoczność elementu członkowskiego klasy. C # obsługuje następujące specyfikatory dostępu -

  • Public
  • Private
  • Protected
  • Internal
  • Chroniony wewnętrzny

Specyfikator dostępu publicznego

Specyfikator dostępu publicznego umożliwia klasie ujawnianie jej zmiennych składowych i funkcji składowych innym funkcjom i obiektom. Do każdego członka publicznego można uzyskać dostęp spoza zajęć.

Poniższy przykład ilustruje to -

using System;

namespace RectangleApplication {
   class Rectangle {
      //member variables
      public double length;
      public double width;
      
      public double GetArea() {
         return length * width;
      }
      public void Display() {
         Console.WriteLine("Length: {0}", length);
         Console.WriteLine("Width: {0}", width);
         Console.WriteLine("Area: {0}", GetArea());
      }
   }//end class Rectangle
   
   class ExecuteRectangle {
      static void Main(string[] args) {
         Rectangle r = new Rectangle();
         r.length = 4.5;
         r.width = 3.5;
         r.Display();
         Console.ReadLine();
      }
   }
}

Kiedy powyższy kod jest kompilowany i wykonywany, daje następujący wynik -

Length: 4.5
Width: 3.5
Area: 15.75

W poprzednim przykładzie zadeklarowano zmienne składowe length i width public, więc można uzyskać do nich dostęp z funkcji Main () za pomocą instancji klasy Rectangle o nazwie r.

Funkcje składowe Display () i GetArea () mogą również uzyskiwać bezpośredni dostęp do tych zmiennych bez korzystania z żadnej instancji klasy.

Zadeklarowano również funkcje składowe Display ()public, więc można też uzyskać do niego dostęp z Main () za pomocą instancji klasy Rectangle o nazwier.

Specyfikator dostępu prywatnego

Specyfikator dostępu prywatnego umożliwia klasie ukrycie swoich zmiennych składowych i funkcji składowych przed innymi funkcjami i obiektami. Tylko funkcje tej samej klasy mogą uzyskać dostęp do jej prywatnych elementów członkowskich. Nawet instancja klasy nie może uzyskać dostępu do swoich prywatnych członków.

Poniższy przykład ilustruje to -

using System;

namespace RectangleApplication {
   class Rectangle {
      //member variables
      private double length;
      private double width;
      
      public void Acceptdetails() {
         Console.WriteLine("Enter Length: ");
         length = Convert.ToDouble(Console.ReadLine());
         Console.WriteLine("Enter Width: ");
         width = Convert.ToDouble(Console.ReadLine());
      }
      public double GetArea() {
         return length * width;
      }
      public void Display() {
         Console.WriteLine("Length: {0}", length);
         Console.WriteLine("Width: {0}", width);
         Console.WriteLine("Area: {0}", GetArea());
      }
   }//end class Rectangle
   
   class ExecuteRectangle {
      static void Main(string[] args) {
         Rectangle r = new Rectangle();
         r.Acceptdetails();
         r.Display();
         Console.ReadLine();
      }
   }
}

Kiedy powyższy kod jest kompilowany i wykonywany, daje następujący wynik -

Enter Length:
4.4
Enter Width:
3.3
Length: 4.4
Width: 3.3
Area: 14.52

W poprzednim przykładzie zadeklarowano zmienne składowe length i width private, więc nie można uzyskać do nich dostępu z funkcji Main (). Funkcje członkowskie AcceptDetails () i Display () mają dostęp do tych zmiennych. Ponieważ funkcje członkowskie AcceptDetails () i Display () są zadeklarowanepublic, można uzyskać do nich dostęp z Main () za pomocą instancji klasy Rectangle o nazwier.

Specyfikator dostępu chronionego

Specyfikator dostępu chronionego umożliwia klasie podrzędnej dostęp do zmiennych składowych i funkcji składowych swojej klasy bazowej. W ten sposób pomaga we wdrażaniu dziedziczenia. Omówimy to bardziej szczegółowo w rozdziale poświęconym dziedziczeniu.

Specyfikator dostępu wewnętrznego

Specyfikator dostępu wewnętrznego umożliwia klasie ujawnienie jej zmiennych składowych i funkcji składowych innym funkcjom i obiektom w bieżącym zestawie. Innymi słowy, do każdego elementu członkowskiego z wewnętrznym specyfikatorem dostępu można uzyskać dostęp z dowolnej klasy lub metody zdefiniowanej w aplikacji, w której zdefiniowano element członkowski.

Poniższy program ilustruje to -

using System;

namespace RectangleApplication {
   class Rectangle {
      //member variables
      internal double length;
      internal double width;
      
      double GetArea() {
         return length * width;
      }
      public void Display() {
         Console.WriteLine("Length: {0}", length);
         Console.WriteLine("Width: {0}", width);
         Console.WriteLine("Area: {0}", GetArea());
      }
   }//end class Rectangle
   
   class ExecuteRectangle {
      static void Main(string[] args) {
         Rectangle r = new Rectangle();
         r.length = 4.5;
         r.width = 3.5;
         r.Display();
         Console.ReadLine();
      }
   }
}

Kiedy powyższy kod jest kompilowany i wykonywany, daje następujący wynik -

Length: 4.5
Width: 3.5
Area: 15.75

W poprzednim przykładzie zwróć uwagę, że funkcja członkowska GetArea () nie została zadeklarowana z żadnym specyfikatorem dostępu. Jaki byłby zatem domyślny specyfikator dostępu członka klasy, jeśli o żadnym nie wspominamy? To jestprivate.

Chroniony specyfikator dostępu wewnętrznego

Specyfikator chronionego dostępu wewnętrznego umożliwia klasie ukrycie swoich zmiennych składowych i funkcji składowych przed innymi obiektami i funkcjami klasy, z wyjątkiem klasy potomnej w tej samej aplikacji. Jest to również używane podczas implementowania dziedziczenia.