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.