Depois de sobrecarregar o operador ==, como comparar se duas variáveis ??pontos ao mesmo objeto?
-
03-07-2019 - |
Pergunta
Sobrecarregar o operador de comparação, como comparar se as duas variáveis ??aponta para o mesmo objeto (ou seja. Não o valor)
public static bool operator ==(Landscape a, Landscape b)
{
return a.Width == b.Width && a.Height == b.Height;
}
public static bool operator !=(Landscape a, Landscape b)
{
return !(a.Width == b.Width && a.Height == b.Height);
}
Solução
Use as Object.ReferenceEquals método estático.
Claro que, para que o == e! = Método para manter a sua funcionalidade completa, você também deve ser substituindo Equals e GetHashCode para que eles retornam um conjunto consistente de respostas para os chamadores.
Outras dicas
Tente a.ReferenceEquals(b);
Para verificar se ambos os pontos para o mesmo objeto. Você deve usar o método Object.ReferenceEquals. Ele irá retornar verdadeiro se ambos são mesmo ou se ambos são nulos. Então ele irá retornar false
Eu sei que é uma questão antiga, mas se você estiver indo para sobrecarregar o método == ou Object.Equals, você também deve sobrecarregar o operador inverso! =.
E, neste caso, uma vez que você está comparando os números internos, você deve sobrecarregar os outros operadores de comparação <,>, <=,> =.
As pessoas que consomem a sua classe no futuro, quer se trate de consumidores de terceiros, ou desenvolvedores que assumir o seu código, pode usar algo como CodeRush ou Refactor, que será automaticamente "flip" a lógica (também chamado inverter o condicional) e, em seguida, alise-o, para sair dos 25 aninhados se da síndrome. Se o seu código faz isso, e você já sobrecarregado o operador == sem sobrecarregar o operador! =, Poderia mudar o significado pretendido do seu código.