C # - Encapsulamento

Encapsulationé definido como 'o processo de incluir um ou mais itens em um pacote físico ou lógico'. O encapsulamento, na metodologia de programação orientada a objetos, impede o acesso aos detalhes de implementação.

Abstração e encapsulamento são recursos relacionados na programação orientada a objetos. A abstração permite tornar as informações relevantes visíveis e o encapsulamento permite que um programador implemente o nível de abstração desejado .

O encapsulamento é implementado usando access specifiers. Aaccess specifierdefine o escopo e a visibilidade de um membro da classe. C # suporta os seguintes especificadores de acesso -

  • Public
  • Private
  • Protected
  • Internal
  • Interno protegido

Especificador de acesso público

O especificador de acesso público permite que uma classe exponha suas variáveis ​​de membro e funções de membro a outras funções e objetos. Qualquer membro público pode ser acessado de fora da classe.

O exemplo a seguir ilustra isso -

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

Quando o código acima é compilado e executado, ele produz o seguinte resultado -

Length: 4.5
Width: 3.5
Area: 15.75

No exemplo anterior, as variáveis ​​de membro comprimento e largura são declaradas public, para que possam ser acessados ​​a partir da função Main () usando uma instância da classe Rectangle, chamada r.

As funções de membro Display () e GetArea () também podem acessar essas variáveis ​​diretamente, sem usar nenhuma instância da classe.

As funções-membro Display () também são declaradaspublic, portanto, também pode ser acessado de Main () usando uma instância da classe Rectangle, chamadar.

Especificador de acesso privado

O especificador de acesso privado permite que uma classe oculte suas variáveis ​​de membro e funções de membro de outras funções e objetos. Apenas funções da mesma classe podem acessar seus membros privados. Mesmo uma instância de uma classe não pode acessar seus membros privados.

O exemplo a seguir ilustra isso -

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

Quando o código acima é compilado e executado, ele produz o seguinte resultado -

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

No exemplo anterior, as variáveis ​​de membro comprimento e largura são declaradas private, então eles não podem ser acessados ​​a partir da função Main (). As funções de membro AcceptDetails () e Display () podem acessar essas variáveis. Como as funções de membro AcceptDetails () e Display () são declaradaspublic, eles podem ser acessados ​​de Main () usando uma instância da classe Rectangle, chamadar.

Especificador de acesso protegido

O especificador de acesso protegido permite que uma classe filha acesse as variáveis ​​de membro e funções de membro de sua classe base. Desta forma, ajuda na implementação de herança. Discutiremos isso com mais detalhes no capítulo sobre herança.

Especificador de acesso interno

O especificador de acesso interno permite que uma classe exponha suas variáveis ​​de membro e funções de membro a outras funções e objetos no assembly atual. Em outras palavras, qualquer membro com especificador de acesso interno pode ser acessado de qualquer classe ou método definido no aplicativo no qual o membro está definido.

O programa a seguir ilustra isso -

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

Quando o código acima é compilado e executado, ele produz o seguinte resultado -

Length: 4.5
Width: 3.5
Area: 15.75

No exemplo anterior, observe que a função de membro GetArea () não está declarada com nenhum especificador de acesso. Então, qual seria o especificador de acesso padrão de um membro da classe se não mencionarmos nenhum? Isto éprivate.

Especificador de acesso interno protegido

O especificador de acesso interno protegido permite que uma classe oculte suas variáveis ​​de membro e funções de membro de outros objetos e funções de classe, exceto uma classe filha dentro do mesmo aplicativo. Isso também é usado durante a implementação de herança.