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