none
[iniciante] Instanciando classes filhas com if RRS feed

  • Pergunta

  • Bom dia! Sou iniciante em C# e estou seguindo um tutorial de criar contas em banco, o meu código é o seguinte para cadastrar novas contas:

    namespace Banco
    {
        public partial class Form2 : Form
        {
            private Form1 formPrincipal;
            public Form2(Form1 form)
            { //constructor do form2 usando o form1 de entrada
                this.formPrincipal = form;
                InitializeComponent();
                comboTipoConta.Items.Add("Corrente");
                comboTipoConta.Items.Add("Poupanca"); 
                comboTipoConta.Items.Add("Investimento");
                
            }
    
            private void botaoCadastrar_Click(object sender, EventArgs e)
            {
                Conta novaConta;
                if (comboTipoConta.Text == "Corrente") 
                {
                    ContaCorrente contaCorrente = new ContaCorrente();
                    novaConta = contaCorrente;
                }
                if (comboTipoConta.Text == "Poupanca")
                {
                    ContaPoupanca contaPoupanca = new ContaPoupanca();
                    novaConta = contaPoupanca;
                }
                //if (comboTipoConta.Text == "Investimento")
                else
                {
                    ContaInvestimento investimento = new ContaInvestimento();
                    novaConta = investimento;
                }            
                novaConta.Numero = Convert.ToInt32(textoNumero.Text);
                novaConta.Titular = new Cliente(textoTitular.Text);
                novaConta.Deposita(Convert.ToDouble(textoSaldo.Text));
                this.formPrincipal.AdicionaConta(novaConta);
                MessageBox.Show("Conta cadastrada");
            }
        }
    }

    Em que esses 3 tipos de contas são herança da classe abstrata Conta.

    O problema é que se eu não comentar o ultimo if o código não compila e diz que novaConta não foi instanciado, mas se eu deixar como else compila normalmente.

    Não posso instanciar uma Conta antes pq é uma classe abstrata.

    Qual a forma correta de instanciar essas classes nessa situação?

    Muito obrigado de imediato.

    segunda-feira, 24 de agosto de 2020 15:45

Todas as Respostas

  • olá,

    O que acontece ai é seguinte: o Else garante um objeto não null, caso as condições acima não atende as condições.

    quinta-feira, 27 de agosto de 2020 13:02
    Moderador
  • Boa tarde.

    Aqui vai uma sugestão:

    ...

    Conta novaConta; switch (comboTipoConta.Text) { case "Corrente": novaConta = new ContaCorrente(); break; case "Poupanca": novaConta = new ContaPoupanca(); break; case "Investimento": novaConta = new ContaInvestimento(); break; default: // Realizar tratamento em caso de não ser nenhum dos valores da // lista contida no Combo break; }

    ...


    Att,

    segunda-feira, 31 de agosto de 2020 17:40