Solucionado (ver solução)
Solucionado
(ver solução)
2
respostas

A o método Adiciona da classe GerenciadorDeImposto deu um erro que eu não entendi

public class GerenciadorDeImposto
{
    public double Total { get; private set; }

    // Em Adiciona o C# diz: Inconsistent accessibility: parameter type 'CaixaEletronico.ITributavel' is less accessible than method 'CaixaEletronico.GerenciadorDeImposto.Adiciona(CaixaEletronico.ITributavel)
    public void Adiciona(ITributavel tributavel)
    {
        this.Total += tributavel.CalculaTributos();
    }
}

interface ITributavel
{
    double CalculaTributos();
}

class ContasPoupanca : Contas, ITributavel
{
    public ContasPoupanca(Clientes cliente) : base (cliente)
    {
        this.titular = cliente;
    }

    public override string Sacar(double valor)
    {
        if (valor <= this.Saldo && valor > 0 && titular.EhMaiorDeIdade())
        {
            this.Saldo -= valor + 0.1;
            Totalizador total = new Totalizador();
            total.Adiciona(valor);
            return "Saque efetuado com sucesso.";
         }
         else
         {
             return "Erro ao efetuar saque.";
         }
     }

     public double CalculaTributos()
     {
         return this.Saldo * 0.02;
     }
}

public partial class Form1 : Form
{
    public Form1()
    {
        InitializeComponent();
    }

    //Estas variáveis se ficarem como public o C# diz: Inconsistent accessibility: field type 'CaixaEletronico.Contas[]' is less accessible than field 'CaixaEletronico.Form1.conta

    //Também queria saber o motivo disso
    private Contas[] conta;

    private Clientes[] cliente;


    private void Form1_Load(object sender, EventArgs e)
    {
        conta = new Contas[2];
        cliente = new Clientes[2];
        cliente[0] = new Clientes("Vagner Alberto", 27);

        conta[0] = new ContasPoupanca(cliente[0]);
        conta[0].numero = 1;
        cliente[1] = new Clientes("Pedro Nunes", 32);
        conta[1] = new ContasInvestimento(cliente[1]);
        conta[1].numero = 2;
        foreach (Clientes ddd in cliente)
        {
            comboClientes.Items.Add(ddd.nome);
        }
    }

    private void botaoDeAcao_Click(object sender, EventArgs e)
    {
        GerenciadorDeImposto objeto = new GerenciadorDeImposto();
        foreach (ITributavel ct in conta)
        {
            objeto.Adiciona(ct);
        }
        MessageBox.Show("Total: " + objeto.Total);
    }
}
2 respostas
solução!

Marcelo,

Eu tomei a liberdade de editar e corrigir a formatação da sua resposta. Duas considerações antes de responder:

1) Procure sempre utilizar o Code Sample quando for exibir código. Ela faz com que o código seja exibido em uma font monospaced, garantindo que a edentação seja exibida corretamente.

2) Edente o código para quem for ler possa compreender melhor.

Blz? :)

Então, quanto a sua dúvida o erro que está aparecendo para você é o seguinte: Inconsistent accessibility. Toda vez que você ver esse erro, significa que há uma inconsistência de acessibilidade, ou seja, você está tentando, em uma classe pública, acessar um atributo ou referência de outra classe que não é pública e não faz parte do mesmo namespace.

A solução é colocar as classes e interfaces como públicas, para que outras classes de outros namespaces e projetos possam utilizá-la.

Valeu. Vô tentar fazer isso na minha classe.