No C#, o controle de acesso aos membros de uma classe, struct, interface ou outro tipo é essencial para garantir a integridade e a encapsulação do código. A acessibilidade de um membro determina quais partes do código podem interagir com ele, e isso é configurado por meio de modificadores de acesso. Vamos explorar como isso funciona e os diferentes níveis de acessibilidade disponíveis.
O Que é Acessibilidade de Membros?
A acessibilidade de um membro refere-se à capacidade de outras partes do programa acessarem esse membro. Isso é controlado pelo modificador de acesso atribuído à declaração do membro. Quando um membro está acessível, significa que pode ser usado ou chamado de fora de seu escopo imediato.
Os modificadores de acesso mais comuns em C# são:
- public: O membro está acessível a qualquer parte do programa.
- protected: O membro está acessível apenas dentro da própria classe ou em classes derivadas.
- internal: O membro está acessível apenas dentro do mesmo assembly.
- private: O membro está acessível apenas dentro do tipo que o declarou.
- protected internal: Acesso dentro do assembly ou em tipos derivados.
- private protected: Acesso dentro da mesma classe e tipos derivados, mas apenas dentro do assembly.
Declaração de Acessibilidade
Dependendo de onde o membro é declarado, a acessibilidade pode variar:
- Namespaces: Todos os tipos dentro de namespaces são implicitamente públicos ou internos.
- Classes: Os membros podem ser privados, protegidos, internos ou públicos, dependendo da necessidade de acesso.
- Structs: Os membros são privados por padrão e não podem ser protegidos.
- Interfaces: Todos os membros são implicitamente públicos.
- Enumerações: Os membros são implicitamente públicos.
Exemplos de Uso
Aqui está um exemplo de diferentes níveis de acessibilidade em uma classe:
class Carro
{
public string Marca; // Acessível a qualquer parte do programa
private string Modelo; // Acessível apenas dentro da classe Carro
protected string Ano; // Acessível dentro da classe Carro e em classes derivadas
internal string Cor; // Acessível dentro do mesmo assembly
}
Neste exemplo, Marca
pode ser acessada de qualquer lugar, enquanto Modelo
é restrito à própria classe. O campo Ano
pode ser acessado por classes que herdam de Carro
, e Cor
só pode ser acessado dentro do mesmo assembly.
Domínios de Acessibilidade
O domínio de acessibilidade define as áreas do código onde um membro pode ser acessado. Em termos práticos, isso significa que um membro public
tem o domínio mais amplo, enquanto um membro private
tem o domínio mais restrito.
Por exemplo:
public class Veiculo
{
protected int Velocidade;
}
public class Carro : Veiculo
{
public void Acelerar()
{
Velocidade += 10; // Acessível em uma classe derivada
}
}
Aqui, Velocidade
está acessível na classe derivada Carro
, pois é um membro protected
de Veiculo
.
Regras de Acessibilidade
Existem algumas regras importantes que devem ser observadas:
- Herança e Membros Privados: Membros privados são herdados, mas não são acessíveis diretamente na classe derivada.
class A
{
private int x;
}
class B : A
{
public void MostrarX()
{
// Não é possível acessar 'x' diretamente
}
}
- Acessibilidade e Tipos: O tipo de um membro (como o retorno de um método ou tipo de campo) deve ser pelo menos tão acessível quanto o próprio membro.
class A {...}
public class B
{
private A _campo; // Permitido, pois 'A' tem a mesma acessibilidade que '_campo'
}
Conclusão
Controlar a acessibilidade de membros em C# é essencial para garantir a encapsulação e segurança do código. Ao usar corretamente os modificadores de acesso, você pode proteger os detalhes de implementação e expor apenas as partes do código que devem ser acessíveis a outras classes ou assemblies.
Diogo
Posts relacionados
Assine o boletim informativo
* Você receberá as últimas notícias e atualizações sobre suas celebridades favoritas!