1
resposta

Não consigo sobrescrever o método Equals()

Minha classe Cliente: public class Cliente { //Auto implemented properties public string Nome { get; set; } public int Idade { get; set; } //Propriedade que retorna TRUE se Idade for maior que 18 public bool MaiorDeIdade { get { return this.Idade >= 18; } } //Propriedade implementada manualmente, permite maior controle do que acontece quando é definida ou lida private string cpf; public string Cpf { get { return cpf; } set { cpf = value; } } //Construtor de classe que obriga a passagem do parâmetro quando a classe é instanciada, ou executa uma ação quando iniciada public Cliente(string nome, int idade=18) { this.Nome = nome; this.Idade = idade; } //Este construtor é adicionado para permitir instanciar a classe sem informar o parâmetro nome public Cliente() {

} public override bool Equals(Object obj) { Cliente outroCliente = (Cliente)obj; return this.Nome == outroCliente.Nome && this.Cpf == outroCliente.Cpf; } public override string ToString() { return this.Nome; }

}

Ao executar o seguinte trecho, o mesmo retorna False. Alguém saberia me dizer o porque?

Cliente c1 = new Cliente(); c1.Cpf = "1234-5"; c1.Nome = "Ricardo";

Cliente c2 = new Cliente(); c1.Cpf = "1234-5"; c1.Nome = "Ricardo";

MessageBox.Show("São iguais? "+ c1.Equals(c2));

1 resposta

Boa tarde. Se reparar bem o seu código:

 Cliente c1 = new Cliente(); c1.Cpf = "1234-5"; c1.Nome = "Ricardo";

Cliente c2 = new Cliente(); c1.Cpf = "1234-5"; c1.Nome = "Ricardo";

O objeto c2, não foi informado nenhum valor para as suas propriedades. O que foi feito informou o mesmo valor 2x para o objeto c1, por isso que retorna false.