C# - Encapsulamento
Encapsulação é definido 'como o processo de incluir um ou mais itens dentro de 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 desejado de abstração .
O encapsulamento é implementado usando especificadores de acesso . Um especificador de acesso define o escopo e a visibilidade de um membro de classe. C# suporta os seguintes especificadores de acesso -
- Público
- Privado
- Protegido
- Interno
- Proteção interna
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 para outras funções e objetos. Qualquer membro público pode ser acessado de fora da classe.
O exemplo a seguir ilustra isso -
Demonstração ao vivo
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 length e width são declaradas como public , então eles podem ser acessados a partir da função Main() usando uma instância da classe Rectangle, chamada r .
A função membro Display() e GetArea() também pode acessar essas variáveis diretamente sem usar nenhuma instância da classe.
As funções de membro Display() também é declarado público , então também pode ser acessado de Main() usando uma instância da classe Rectangle, chamada r .
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 -
Demonstração ao vivo
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 como privadas , então eles não podem ser acessados a partir da função Main(). As funções de membro AcceptDetails() e Exibir() pode acessar essas variáveis. Como as funções de membro AcceptDetails() e Exibir() são declarados públicos , eles podem ser acessados de Main() usando uma instância da classe Rectangle, chamada r .
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. Dessa forma, ajuda na implementação da 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 para 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 dentro do aplicativo no qual o membro está definido.
O programa a seguir ilustra isso -
Demonstração ao vivo
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 membro GetArea() não é declarado com nenhum especificador de acesso. Então, qual seria o especificador de acesso padrão de um membro de classe se não mencionarmos nenhum? É privado .
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 da herança.
Linguagem C