O problema é o seguinte: minhas contas poupanças e investimentos foram declaradas como variáveis do tipo Conta, e não como variáveis do tipo ContaPoupança e ContaInvestimento. Isso porque eu usei arrays para fazer a criação de todo tipo de conta, segue o código do Form1:
public partial class Form1 : Form
{
private Conta[] contas = new Conta[3];
private Cliente[] clientes = new Cliente[3];
// outras classes estão aqui
private void button1_Click(object sender, EventArgs e)
{
contas[0] = new ContaCorrente();
clientes[0] = new Cliente("Igor Telles", 16);
contas[0].Titular = clientes[0];
contas[0].deposita(2000.0); //saldo inicial
contas[1] = new ContaPoupança();
clientes[1] = new Cliente("Igor Telles", 16);
contas[1].Titular = clientes[1];
contas[1].deposita(1500.0);
contas[1].saca(1);
contas[2] = new ContaInvestimento();
clientes[2] = new Cliente("Igor Telles" , 16);
contas[2].Titular = clientes[2];
contas[2].deposita(3000.)
TotalizadorDeTributos tt = new TotalizadorDeTributos(); // Aqui começa o problema.
tt.Acumula(contas[1]); // o erro exibido é referente ao que está nos parênteses.
MessageBox.Show("total de tributos: " + tt.Total);
}
}
O erro é " Error CS1503 Argument 1: cannot convert from 'CaixaEletronico2.Conta' to 'CaixaEletronico2.ITributável'".
Pelo o que eu entendi, esse erro acontece pois as contas contas[1] e contas[2] são do tipo Conta, e essa classe não está associada a interface ITributável, pois se eu fizer assim:
ContaPoupança cp1 = new ContaPoupança();
//ou
ContaInvestimento ci1 = new ContaInvestimento();
o erro não acontece.
Meu ponto é o seguinte: Há algum jeito de resolver o meu problema sem que eu tenha que deixar de usar os arrays pra criar contas? Pois se não houver significa que nem sempre o polimorfismo funciona, e que eu vou ter que escrever muito mais.