Olá PessoALL,
Por favor, tenho a seguinte dúvida:
Programei dentro da classe "Program" o método "Main()" desta forma:
static void Main()
{
try
{
TesteObjeto();
}
catch (Exception)
{
Console.WriteLine("Catch no método MAIN");
}
finally
{
Console.ReadKey();
}
}
Para testar o tipo "object", dentro da classe "Program" escrevi a função estática "TesteObjeto()", desta forma (detalhe: já existem as classes "ContaCorrente()" e "Cliente()") :
private static void TesteObjeto()
{
object conta = new ContaCorrente(456, 687876);
Cliente carlos_1 = new()
{
Nome = "Carlos",
CPF = "458.623.120-03",
Profissao = "Designer"
};
Cliente carlos_2 = new()
{
Nome = "Carlos",
CPF = "458.623.120-03",
Profissao = "Designer"
};
//if (carlos_1 == carlos_2)
//if (ReferenceEquals(carlos_1, carlos_2))
//if (carlos_1.Equals(carlos_2))
// Estou passando o objeto ERRADO propositalmente aqui:
if (carlos_1.Equals(conta))
Console.WriteLine("São iguais");
else
Console.WriteLine("NÃO São iguais");
}
Até aqui tudo certo. Fiz um "override" dentro da minha classe "cliente" desta forma:
- (1) - PRIMEIRO TESTE
public override bool Equals(object obj)
{
// Conversão Explícita
Cliente outroCliente = (Cliente)obj;
return CPF == outroCliente.CPF;
}
- (2) - SEGUNDO TESTE
public override bool Equals(object obj)
{
Cliente outroCliente = obj as Cliente;
// (*2) Aqui ocorre a exceção "System.NullReferenceException" e NÃO devolve para o "Main()".
return CPF == outroCliente.CPF;
}
No PRIMEIRO TESTE o erro ao receber um objeto "conta" cai no tratamento "catch" e mostra a mensagem: "Catch no método MAIN".
No SEGUNDO TESTE o programa NÃO devolve para a "Main()" tratar o erro, apresentando a exceção dentro da própria classe "cliente"...
Pergunta:
- Por que no SEGUNDO TESTE a exceção não é devolvida e tratada no método MAIN()?
Obrigado,
Fabio Ingenito.