2
respostas

Dúvidas quanto a um Extension Method acessar outra classe

Na resposta do exercício diz: "O código acima não compila. Para o compilador do c#, um Extension Method é um método estático comum e, portanto, só pode acessar a interface pública da classe Conta."

Como saber se o Extension Method pode acessar ou não outra classe? Pela definições de acesso de uma propriedade? Percebi que no exercício a única propriedade que está como private é o método GET, é isso?

Sobre instanciar uma classe, no que o método 'Static' influencia?Obg!

2 respostas

Olá Samuel,

O Extension Method por definição só pode acessar os métodos ou atributos da classe que forem públicos. No caso do exemplo perceba que a propriedade Saldo tem o get como público (por padrão) e logo em seguida tem o set como privado. Isso significa que qualquer um pode ler o saldo mas só a própria classe pode fazer alterações nele.

Então quando fazemos a seguinte operação no Extension Method:

conta.Saldo = novoSaldo;

Estamos tentando alterar o saldo da conta a partir do Extension Method... será que funciona?

Não funciona porque o Extension Method não faz parte da classe então ele não pode alterar o valor do saldo já que o set dela é privado.

Sobre a sua sgeunda dúvida, uma classe declarada como static não pode ser instanciada. Por exemplo, se fizéssemos:

static class Conta 
{
    double Saldo {get; private set;}
}

Não poderíamos criar novas instâncias de contas com a instrução:

Conta conta = new Conta();

O próprio compilador iria reclamar dessa instrução já que a classe é estática.

Repare que o método tenta escrever um valor dentro da propriedade Saldo da conta. Vamos olhar a declaração dessa propriedade.

  public double Saldo { get; private set; }

Repare que o set da propriedade Saldo é privado, um extension method só pode acessar a interface pública de uma classe portanto no extension method podemos apenas ler a propriedade Saldo mas nunca escrever. Você sempre só vai poder acessar o que está marcado como public.

Espero ter ajudado.

Abraços e bons estudos.