top of page
  • Foto do escritorFábio Henrique

Do zero a iniciante - C# modificadores de acesso

Atualizado: 11 de mai. de 2021

Modificadores de acesso controlam a forma como classes ou os membros de uma classe são visíveis por outras classes e /ou instâncias de outras classes. É uma forma de deixar o código menos passível de bugs causados pelos próprios programadores.



Modificadores de acesso em classes


Public: Permite que a classe seja acessada por qualquer assembly.

Sealed: Não permite que a classe seja herdada.

Partial: Permite que a classe tenha seu escopo divido em dois arquivos. Vemos muito sua utilização ao desenvolver para web, por exemplo.

Static: Especifica que a classe somente tem membros estáticos. Não pode ser instanciada.

Abstract: Define molde para classes filhas. Não pode ser instanciada e os métodos são implementados nas classes filhas.


 

Modificadores de acesso em membros de classes


Public: Permite que os membros das classes sejam acessados por qualquer outro no escopo.


Private: O membro só poderá ser acessado dentro do escopo da classe.


Protected: O membro pode ser acessado dentro do escopo da classe e também nas classes filhas.


Internal: Permite acesso somente por classes do mesmo assembly.


Static: Permite acesso, sem a necessidade da instância de um objeto.


Abstract: São métodos de classes Abstract que não possuem implementação.


Virtual: Permite que os métodos sejam sobrescritos por classes filhas.


Readonly: Limita acesso a somente leitura aos atributos da classe.


 

Hands On


Usando o código do post passado vamos ver os modificadores de acesso na prática!


public class Cliente
{
 public string Nome { getset; }
 public decimal Saldo { getset; }

 public void TransferirDinheiro(Cliente destinatario, decimal valor)
 {
    // Soma o saldo do destinatário
    destinatario.Saldo += valor;
    // Subtrai o saldo de quem enviou
    Saldo -= valor;
 }

 public void EfetuarPagamento(decimal valor)
 {
    Saldo -= valor;
 }

 public decimal VerificarSaldo()
 {
   return Saldo;
 }

}

A propriedade Saldo, por armazenar um dado importante, não deveria poder ter seu valor acessado diretamente de fora da classe Cliente, ou seja, ele não deveria ser public! Por isso, iremos alterar o modificador de acesso para private.


private decimal Saldo { getset; }

Após fazer isso você verá que ocorrerá um erro de compilação na classe Program, como mostra a imagem abaixo



Você deve estar pensando. "E agora como vou definir o saldo inicial para um cliente?". Para resolver isso basta criar um construtor na classe Cliente.


Os construtores são tipos especiais de métodos usados ​​para criar e inicializar objetos. É através deste tipo especial de método, chamado de construtor, que você cria instâncias de uma classe.

  • Construtores não retornam valor, mesmo sem a palavra reservada void

  • Construtores usam o mesmo nome da classe


public class Cliente
{
    // Construtor da classe.
    public Cliente(decimal saldo)
    {
        Saldo = saldo;
    }

    public string Nome { getset; }
    private decimal Saldo { getset; }
    
    ...
}

O construtor recebe o saldo via parâmetro e através deste inicializa a propriedade que setamos anteriormente como private.


Feito isso vamos mudar a forma como foram instanciados os objetos cliente1 e cliente2


class Program
{
    static void Main(string[] args)
    {
         // Instancia o objeto cliente1
         Cliente cliente1 = new Cliente(1000);
         // Seta as propriedades do objeto cliente1
         cliente1.Nome = "Fabio";

         // Instancia o objeto cliente2
         Cliente cliente2 = new Cliente(0);
         // Seta as propriedades do objeto cliente2
         cliente2.Nome = "Raquel";

         // Transfere 500 reais para o cliente2 (Raquel)
         cliente1.TransferirDinheiro(cliente2500);
         // Efetua um pagamento no valor de 500 reais
         cliente2.EfetuarPagamento(500);
    }
}

As mudanças feitas garantem que o saldo será definido no momento em que o objeto for criado e que o mesmo só poderá ter seu valor alterado pelas ações de transferir dinheiro e efetuar pagamento.


 


Observações


Uma classe pode conter mais de um construtor. Estes devem ter parâmetros distintos que é o que irá diferenciá-los


Neste post foi mencionado a palavra assembly. Não se preocupe com isso no momento pois requer conhecimento prévio de outras coisas, mas se estiver curioso pesquise na internet


Não existe uma fórmula certa para definir como será a estrutura de uma classe e/ou quais serão os modificadores de acesso utilizados. Tudo isso deve ser pensando baseado nas regras do negócio.


O espaço entre a teoria e a prática não é tão grande como é, a teoria na prática.


 

Deixe seus elogios, críticas e dúvidas nos comentários!

59 visualizações0 comentário

Posts recentes

Ver tudo

Comments


bottom of page