Inscreva-se agora

* Você receberá as últimas notícias e atualizações sobre suas celebridades favoritas!

Postagens em alta

Blog

Acessibilidade de Membros no C#: Controle de Acesso e Declaração
Aprenda C#

Acessibilidade de Membros no C#: Controle de Acesso e Declaração 

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:

  1. 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
       }
   }
  1. 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.

Posts relacionados

Deixe um comentário


Campos obrigatórios são marcado com *