C # - Encapsulation

Encapsulationest défini «comme le processus consistant à enfermer un ou plusieurs éléments dans un package physique ou logique». L'encapsulation, dans la méthodologie de programmation orientée objet, empêche l'accès aux détails d'implémentation.

L'abstraction et l'encapsulation sont des fonctionnalités liées dans la programmation orientée objet. L'abstraction permet de rendre visibles les informations pertinentes et l'encapsulation permet à un programmeur d' implémenter le niveau d'abstraction souhaité .

L'encapsulation est implémentée en utilisant access specifiers. Unaccess specifierdéfinit la portée et la visibilité d'un membre de classe. C # prend en charge les spécificateurs d'accès suivants -

  • Public
  • Private
  • Protected
  • Internal
  • Protégé interne

Spécificateur d'accès public

Le spécificateur d'accès public permet à une classe d'exposer ses variables membres et ses fonctions membres à d'autres fonctions et objets. Tout membre public est accessible depuis l'extérieur de la classe.

L'exemple suivant illustre cela -

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();
      }
   }
}

Lorsque le code ci-dessus est compilé et exécuté, il produit le résultat suivant -

Length: 4.5
Width: 3.5
Area: 15.75

Dans l'exemple précédent, les variables de membre longueur et largeur sont déclarées public, afin qu'ils soient accessibles à partir de la fonction Main () en utilisant une instance de la classe Rectangle, nommée r.

La fonction membre Display () et GetArea () peuvent également accéder directement à ces variables sans utiliser aucune instance de la classe.

Les fonctions membres Display () sont également déclaréespublic, il est donc également accessible depuis Main () en utilisant une instance de la classe Rectangle, nomméer.

Spécificateur d'accès privé

Le spécificateur d'accès privé permet à une classe de masquer ses variables membres et ses fonctions membres à d'autres fonctions et objets. Seules les fonctions de la même classe peuvent accéder à ses membres privés. Même une instance d'une classe ne peut pas accéder à ses membres privés.

L'exemple suivant illustre cela -

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();
      }
   }
}

Lorsque le code ci-dessus est compilé et exécuté, il produit le résultat suivant -

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

Dans l'exemple précédent, les variables de membre longueur et largeur sont déclarées private, donc ils ne sont pas accessibles depuis la fonction Main (). Les fonctions membres AcceptDetails () et Display () peuvent accéder à ces variables. Puisque les fonctions membres AcceptDetails () et Display () sont déclaréespublic, ils sont accessibles depuis Main () en utilisant une instance de la classe Rectangle, nomméer.

Spécificateur d'accès protégé

Le spécificateur d'accès protégé permet à une classe enfant d'accéder aux variables membres et aux fonctions membres de sa classe de base. De cette façon, cela aide à implémenter l'héritage. Nous en discuterons plus en détail dans le chapitre sur l'héritage.

Spécificateur d'accès interne

Le spécificateur d'accès interne permet à une classe d'exposer ses variables membres et ses fonctions membres à d'autres fonctions et objets de l'assembly actuel. En d'autres termes, tout membre avec un spécificateur d'accès interne est accessible à partir de n'importe quelle classe ou méthode définie dans l'application dans laquelle le membre est défini.

Le programme suivant illustre cela -

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();
      }
   }
}

Lorsque le code ci-dessus est compilé et exécuté, il produit le résultat suivant -

Length: 4.5
Width: 3.5
Area: 15.75

Dans l'exemple précédent, notez que la fonction membre GetArea () n'est déclarée avec aucun spécificateur d'accès. Alors, quel serait le spécificateur d'accès par défaut d'un membre de classe si nous n'en mentionnons aucun? Il estprivate.

Spécificateur d'accès interne protégé

Le spécificateur d'accès interne protégé permet à une classe de masquer ses variables membres et ses fonctions membres à d'autres objets et fonctions de classe, à l'exception d'une classe enfant dans la même application. Ceci est également utilisé lors de l'implémentation de l'héritage.