1
resposta

Método Equals()

Olá!

Salvo engano, no JAVA temos o método equals que, quando passamos 2 objetos diferentes só que do mesmo tipo e com as propriedades preenchidas com os mesmos valores, ele faz uma comparação e retorna dizendo se é verdadeiro ou falso.

Vi que no C# tb tem esse método, porém, ao tentar usar recebo sempre 'false' como retorno, mesmo os objetos possuindo o mesmo preenchimento.

Alguém sabe explicar o pq disso? Ou se, no caso, o método aqui funciona de forma diferente?

        ContaCorrente contaGabi = new ContaCorrente();
            contaGabi.titular = "gabriela";
            contaGabi.agencia = 123;
            contaGabi.numero = 778899;
            contaGabi.saldo = 200;


            ContaCorrente contaGabiCosta = new ContaCorrente();
            contaGabiCosta.titular = "gabriela";
            contaGabiCosta.agencia = 123;
            contaGabiCosta.numero = 778899;
            contaGabiCosta.saldo = 200;


            Console.WriteLine(contaGabiCosta.Equals(contaGabi));
1 resposta

Olá!

No C# funciona um pouco diferente de como você explicou no Java. No caso do método Equals quando aplicado em qualquer tipo de variável que não seja primordial (string,int,double...) ele irá pegar um valor representando da variável (não sei dizer se é um ponteiro, mas segue uma logica parecida) e comparar esses valores.

Para que o método funcione corretamente seria necessário aplicar o override no equals da classe indicando manualmente quais campos ele deve verificar para fazer a comparação de modo correto.

O metodo Equals teria de ser algo do tipo:

public override bool Equals(object obj)
        {
            return obj is ContaCorrente corrente &&
                   titular == corrente.titular &&
                   agencia == corrente.agencia &&
                   numero == corrente.numero &&
                   saldo == corrente.saldo;
        }