Encapsulamento

O encapsulamento é um dos pilares da programação orientada a objetos em C#. Ele consiste em ocultar os detalhes internos de uma classe, expondo apenas o que é necessário para o uso externo, protegendo assim os dados e a lógica interna contra acessos e modificações indevidas.

O que é Encapsulamento?

Encapsulamento significa agrupar dados (atributos) e comportamentos (métodos) dentro de uma classe e controlar o acesso a eles. O objetivo é proteger o estado interno do objeto, permitindo que ele seja manipulado apenas por meio de métodos e propriedades definidos pela própria classe. Isso garante integridade dos dados e facilita a manutenção do código, já que alterações internas não afetam quem usa a classe.

“O encapsulamento é o processo de ocultar ou esconder os membros de uma classe do acesso exterior usando modificadores de acesso. […] Uma classe bem encapsulada deve ocultar seus dados e os detalhes de implementação do mundo exterior.”1

Modificadores de Acesso em C#

Os modificadores de acesso definem quem pode aceder a membros (atributos, métodos, propriedades) de uma classe. Os principais são:

  • public: acesso irrestrito, visível de qualquer lugar.
  • private: acesso restrito à própria classe. É o padrão para atributos que não devem ser acessados externamente.
  • protected: acesso permitido apenas na própria classe e em classes derivadas.
  • internal: acesso permitido apenas dentro do mesmo assembly/projeto.
  • protected internal: acesso permitido em classes derivadas ou no mesmo assembly.

Exemplo:

public class Pessoa
{
private string nome; // Só pode ser acedido dentro da própria classe
protected int idade; // Pode ser acedido na classe e em herdeiros
public string Documento; // Pode ser acedido de qualquer lugar

public void DefinirNome(string novoNome)
{
nome = novoNome; // Modifica o campo privado de forma controlada
}

public string ObterNome()
{
return nome;
}
}

Neste exemplo, o campo nome é privado e só pode ser acedido ou modificado por métodos da própria classe. O campo idade é protegido, enquanto Documento é público.

Propriedades

Em C#, é comum usar propriedades para controlar o acesso a campos privados, permitindo leitura e/ou escrita conforme necessário. Isso reforça o encapsulamento e permite adicionar validações ou lógica personalizada.

Exemplo com propriedade:

public class ContaBancaria
{
private double saldo; // campo privado

public double Saldo // propriedade pública só para leitura
{
get { return saldo; }
private set { saldo = value; }
}

public void Depositar(double valor)
{
if (valor > 0)
saldo += valor;
}
}

Aqui, o saldo só pode ser alterado por métodos da própria classe, nunca diretamente de fora.

Resumo das Boas Práticas

  • Use o modificador mais restritivo possível para atributos e métodos.
  • Exponha dados apenas por meio de métodos e propriedades controladas.
  • Utilize propriedades para leitura e escrita segura dos campos privados.
  • Oculte detalhes de implementação e exponha apenas o necessário para o funcionamento externo da classe.