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.