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

'System.NullReferenceException'

Estou recebendo a seguinte mensagem de erro acima quando eu tento depositar

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

private void Form1_Load(object sender, EventArgs e)
        {
            Conta conta = new Conta();
            conta.Titular = new Cliente();
            conta.Deposita(250.0);
            conta.Numero = 10;
            conta.Titular.Nome = "Victor";

            textoNumero.Text = Convert.ToString(conta.Numero);
            textoSaldo.Text = Convert.ToString(conta.Saldo);
            textoTitular.Text = conta.Titular.Nome;


        }
 private void button9_Click(object sender, EventArgs e)
        {
            string textoDoValorDoDeposito = textoValor.Text;
            double valorDeposito = Convert.ToDouble(textoDoValorDoDeposito);
            conta.Deposita(valorDeposito);


            textoNumero.Text = Convert.ToString(conta.Numero);
            textoSaldo.Text = Convert.ToString(conta.Saldo);
            textoTitular.Text = conta.Titular.Nome;
        }
2 respostas
solução!

Olá Cristiano,

Repare no seguinte trecho de código:

private void Form1_Load(object sender, EventArgs e)
{
    Conta conta = new Conta();
    conta.Titular = new Cliente();
    conta.Deposita(250.0);
    conta.Numero = 10;
    conta.Titular.Nome = "Victor";

    textoNumero.Text = Convert.ToString(conta.Numero);
    textoSaldo.Text = Convert.ToString(conta.Saldo);
    textoTitular.Text = conta.Titular.Nome;
}

Na primeira linha do método estamos criando uma variável do tipo Conta chamada conta e armazenando nela uma referência para uma conta. Até aí tudo bem, tudo funciona como o esperado.

Mas o que acontece com essa variável quando o método acaba? Ela deixa de existir! Lembre-se que uma variável só existe dentro do escopo onde ela foi declarada. Isso significa que essa varíavel só vai existir dentro do método Form1_Load().

Agora vamos considerar uma outra parte do código:

private void button9_Click(object sender, EventArgs e)
{
    string textoDoValorDoDeposito = textoValor.Text;
    double valorDeposito = Convert.ToDouble(textoDoValorDoDeposito);
    conta.Deposita(valorDeposito);

    textoNumero.Text = Convert.ToString(conta.Numero);
    textoSaldo.Text = Convert.ToString(conta.Saldo);
    textoTitular.Text = conta.Titular.Nome;
}

Se a variável conta deixou de existir e se não estamos declarando nenhuma varíavel conta dentro desse método, quem é a conta que estamos acessando neste método? Neste caso, estamos acessando o atributo conta que foi declarada no início da classe! E qual é o valor padrão para esse atributo? Uma referência nula! Por isso a NullReferenceException, estamos tentando acessar um método ou atributo da referência conta mas ela ainda não tem referência para nenhuma conta.

Para corrigir esse erro, basta criar uma nova conta e armazenar no atributo conta ao invés de criar uma nova variável conta no método Form1_Load():

private void Form1_Load(object sender, EventArgs e)
{
    conta = new Conta();

    // ... resto do código aqui
}

Espero ter esclarecido sua dúvida!

Obrigado