2
respostas

Erro Mão Na Massa C# III

Estou fazendo o exercicio Mão na Massa do C# III = Tópicos Avançados, e quando insiro o código abaixo, aparece o seguinte erro:

Erro CS0029 Não é possível converter implicitamente tipo "string" em "Caelum.CaixaEletronico.Modelo.Usuarios.Cliente" CaixaEletronico.

colocarei ((((( aonde o erro está localizado.

tentei fazer o casting da seguinte forma: Titular = (Cliente) titular, mas fala que eu não posso fazê-lo.

private Form1 aplicacaoPrincipal;
        public CadastroDeContas(Form1 aplicacaoPrincipal)
        {
            this.aplicacaoPrincipal = aplicacaoPrincipal;
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            string titular = titularConta.Text;
            int numero = Convert.ToInt32(numeroConta.Text);

            Conta conta = new ContaCorrente()
            {
                Numero = numero,(((((Titular = titular)))))
            };

segue a classe Conta

 public abstract class Conta
    {
        public int Numero { get; set; }
        public Cliente Titular { get; set; }
        public double Saldo { get; protected set; }

        public virtual void Deposita(double valor)
        {
            if (valor > 0)
            {
                this.Saldo += valor;
            }
        }

        public abstract void Saca(double valor);

        public void TransferePara( Conta destino, double valor)
        {
            this.Saca(valor);
            destino.Deposita(valor);
        }

        public double CalculaRendimentoAnual()
        {
            double saldoNaqueleMes = this.Saldo;

            for (int i = 0; i < 12; i++)
            {
                saldoNaqueleMes = saldoNaqueleMes * 1.007;
            }

            double rendimento = saldoNaqueleMes - this.Saldo;

            return rendimento;
        }

        public override bool Equals(object obj)
        {
            if(obj != null) {
                Conta outra = (Conta)obj;

                bool numero = (this.Numero == outra.Numero);
                bool titular = (this.Titular.Equals(outra.Titular));

                return numero && titular;
            }
            else
            {
                return false;
            }
        }

        public override string ToString()
        {
            return "Titular: " + Titular.Nome;
        }
    }

segue a classe Cliente

public class Cliente
        {
            public string Nome { get; set; }
            public string Rg { get; set; }
            public string cpf;
            public string endereco;
            public int idade;
            private bool EEmancipado;

            public Cliente(string nome)
            {
                this.Nome = nome;
            }

            public Cliente() { }

            public bool PodeAbrirContaSozinho
            {
                get
                {
                    var maiorDeIdade = this.idade >= 18;
                    var emancipado = (this.EEmancipado);
                    var possuiCPF = !string.IsNullOrEmpty(this.cpf);
                    return (maiorDeIdade || emancipado) && possuiCPF;
                }
            }

            public bool EhMaiorDeIdade()
            {
                return this.idade >= 18;
            }

            public override bool Equals(Object objeto)
            {
                Cliente outroCliente = (Cliente)objeto;
                return this.Rg == outroCliente.Rg;
            }

            public override string ToString()
                {
                    return "Nome: " + this.Nome + " RG: " + this.Rg;
                }
            }
2 respostas

Olá Rudson,

note que ao recuperar o titulaConta você recebe na verdade um tipo string:

string titular = titularConta.Text;

Porém a propriedade Titular na Conta é do tipo Cliente:

public abstract class Conta
{
        public Cliente Titular { get; set; }
}

Então no momento de criar uma ContaCorrente, o código tenta atribuir a referência de uma string num Cliente. Por isso da exception. E mesmo o cast não resolve o problema, porque não Cliente não é uma string e string não é um Cliente, são classes completamente distintas.

Para resolver este problema, você precisa atribuir no Titular da ContaCorrente uma referência para um novo objeto Cliente, cujo Nome é o que foi digitado no campo texto.

Boa tarde Rudson!

Substitui isso:

Conta conta = new ContaCorrente()
            {
                Numero = numero,(((((Titular = titular)))))
            };

Por isso:

Conta conta = new ContaCorrente()
            {
                Numero = numero,Titular = new Cliente(titular)
            };

Vê se dá certo e me avisa! :-)