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);
}
Foi útil?

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

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.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top