En términos de controles nulos, los dos siempre deben devolver los mismos resultados. Si una referencia no nula alguna vez es igual a nula (incluso cuando se utiliza el patrón Objeto nulo), independientemente de si se utilizó ReferenceEquals o el operador ==, es muy algo malo. Entonces, en ese escenario, usaría == /! =.
Yo diría que, si se sobrecarga el operador ==, utilizando ReferenceEquals podría ser ligeramente más rápido. Lo primero que debería hacer un sobrecargado == es ver si las dos variables apuntan al mismo objeto, por lo que en el caso de un operador sobrecargado, usted termina con un marco extra en la pila de llamadas. El uso de ReferenceEquals también garantiza que se haya realizado la única realizada.
En general, también usaría == /! = En casi cualquier otro escenario. La idea completa es que el operador define "igualdad"; eso no siempre es referencial (de hecho, la mayoría de los objetos compuestos deben compararse estructuralmente para la igualdad, son iguales si sus miembros son iguales).El objeto, en teoría, sabe cuál es la mejor manera de compararse con otro objeto, por igualdad, orden relativo, etc. y así, en lugar de codificar una pieza de lógica muy específica y posiblemente incorrecta, debe usar la naturaleza orientada a objetos del lenguaje para deja que el objeto te diga si es igual a cualquier otra cosa o no.
pena señalar que la versión de su amigo es menos legible (que se convierte en un problema cuando los controles son intercambiables, que se por lo general son). – keyser
Además, es peor que lo anterior, debe escribir 'if (! Object.ReferenceEquals (myObject, null))', por lo que es incluso más largo de lo que se describe en la realidad. –
@ReedCopsey No, no tiene que escribir eso, porque su método está dentro de una clase o estructura que hereda el método estático 'ReferenceEquals' de su clase base (directa o indirecta)' System.Object'. Así que está bien escribir lo anterior (ocultar el método heredado con un método 'nuevo' podría por supuesto suceder, pero esa es una excepción malvada). –