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

Object reference not set to an instance of an object.

Estou tentando setar um nome numa variável que está em outra classe, porém está dando esse erro, ele retorna o valor NULL. Poderiam ajudar PF ?


static void Main(string[] args)
        {
            DadosConta contaCorrenteDoWendel = new DadosConta();
                Console.WriteLine("---BEM-VINDO---");
            Console.WriteLine("Escreva seu nome: ");
            contaCorrenteDoWendel.Cadastrar(Console.ReadLine());
-------------------------
public class DadosConta
    {
        public DadosCliente titular;
        private double saldo = 0;

        public void Cadastrar(string nome)
        {
            titular.nome = nome;
        }

public class DadosCliente
    {
        public string nome; // Aqui que não chama
        public int idade;
        public char sexo;
        public DadosEndereco endereco;
    }

OBS: Todos eles têm o mesmo namespace

3 respostas
solução!

Wendel,

Acho que entendi... deixa eu explicar:

O "System.NullReferenceException" é uma referencia de exceção de NULL que pode querer dizer: "NÃO instanciado".

O segredo é o seguinte: Existem duas etapas quando se trabalha com variáveis:

  • Dimensionar: Quando você dimensiona, aloca espaço em memória para a variável;
  • Instanciar: Quando você instancia, diz o que é a variável;

Para corrigir o problema, você precisa INSTANCIAR dois pontos em seu código a saber:

public DadosCliente titular = new DadosCliente();

e

public DadosEndereco endereco = new DadosEndereco();

Se você estiver usando a versão do ".NET 5" (ou superior) pode usar uma forma nova e mais resumida a saber:

public DadosCliente titular = new();

e

public DadosEndereco endereco = new();

Pois a instância será considerada a mesma da declaração da dimensão.

OUTRA COISA! Você também pode instanciar DEPOIS, DESTA FORMA (mas o "NEW" precisa estar dentro da função):

public void Cadastrar(string nome)
{
    titular = new();
    titular.nome = nome;
}

Imagine uma INTERFACE... seria legal instanciá-la posteriormente com uma classe mais específica.

Por favor leia a apostila da CAELUM em PDF:

==========================================================

C# E ORIENTAÇÃO A OBJETOS (Curso FN-13)

https://www.caelum.com.br/apostila/apostila-csharp-orientacao-objetos.pdf

==========================================================

Veja também:

==========================================================

C# - Conceitos básicos - Classes Estáticas

...

Na linguagem C# para criar uma instância de uma classe usamos a palavra-chave new.

...

https://www.macoratti.net/12/01/c_stc1.htm#:~:text=Criar%20um%20objeto%20de%20uma,macoratti%20do%20tipo%20Cliente().

==========================================================

Espero ter te ajudado.

[]'s,

Fabio I.

Muito obrigado amigo, ajudou demais no aprendizado. Muito obrigado.

Wendel, dentro de T.I. tem MUITA coisa para estudar. Se quiser saber alguma coisa, estude muito TODOS os dias! []'s, Fabio I.