Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

Depois que inseri um novo form, para fazer o cadastro dos usuários, não está sendo possível instanciar a Conta.

abstract class Conta

    {

        public string Titular { get; set; }


        public double Numero { get; set; }

        public double Saldo { get; protected set; }

        public string Rg { get; set; }

        public void Deposito(double valor)

        {

            if (valor > 0)

            {

                this.Saldo += valor;

            }

            else

            {

                throw new Exception();
            }
        }

        public void Sacar(double valor)

        {

            if (valor < 0)

            {

                throw new ArgumentException();
            }

            if (valor <= this.Saldo)

            {

                this.Saldo -= valor;

            }
            else

            {

                throw new SaldoInsuficienteException();

            }

        }

        public void Transferencia(Conta contaDestino, double valorTransferencia)

        {

            if (valorTransferencia > 0)

            {

                this.Sacar(valorTransferencia);

                contaDestino.Deposito(valorTransferencia);

            }

            else if (this.Saldo < valorTransferencia)

            {

                throw new SaldoInsuficienteException();

            }

            else

            {

                throw new ArgumentException();

            }

        }

        public override bool Equals(Object obj)

        {

            Conta conta = (Conta)obj;

            return this.Titular.Equals(conta.Rg);

        }

        public override string ToString()

        {

            return "Cliente: " + Titular + " Rg: " + Rg;

        }

    }



public partial class CadastrosDeContas : Form

    {

        public CadastrosDeContas()

        {

            InitializeComponent();

        }

        private void button1_Click(object sender, EventArgs e)

        {
            string titular = titularConta.Text;

            string rg = rgConta.Text;

            int numero = Convert.ToInt32(numeroConta.Text);

//"Conta" é um namespace,mas é usado como um tipo

            Conta conta = new Conta();
        }
    }
1 resposta
solução!

Oi Wanderley, tudo bom?

Na verdade o problema está aqui:

// Declaramos conta como abstrata
abstract class Conta
......
// Tentamos instanciar a conta abstrata
Conta conta = new Conta();

A partir do momento que dizemos que Conta é abstrata o primeiro impacto direto no código é que não conseguiremos mais criar instancias desse tipo. Ou seja, todo lugar onde está escrito:

new Conta();

Deixa de funcionar. A ideia é que utilizemos instancias de sub classes como ContaCorrente ou ContaPoupanca ao invés =)

Isso porque, quando definimos uma classe abstrata estamos dizendo que, na realidade, aquele tipo é apenas uma representação. Quando a gente vai no banco, a gente consegue abrir uma conta corrente, conta poupança, conta salario. Mas conta por sí só não existe. É uma representação de coisas que conta corrente, conta poupança, conta salario, etc tem em comum. Em orientação a objetos representamos isso com classes abstratas.

Troque seu código para algo como:

Conta conta = new ContaCorrente();

Abraço e bons estudos.