C # comparación de objetos

Podría alguien señalar la idea de sobrecargaroperator== para realizar una comparación profunda de objetos (en lugar de la comparación de referencia).

Desde MSDN:

Por defecto, el operador == prueba la igualdad de referencia al determinar si dos referencias indican el mismo objeto. Por lo tanto, los tipos de referencia no tienen que implementar el operador == para obtener esta funcionalidad. Cuando un tipo es inmutable, es decir, los datos contenidos en la instancia no se pueden cambiar, sobrecargar el operador == para comparar la igualdad de valores en lugar de la igualdad de referencia puede ser útil porque, como objetos inmutables, se pueden considerar iguales siempre ya que tienen el mismo valor No es una buena idea anular el operador == en tipos no inmutables.

¿Cuándo se beneficiaría realmente?

Y, como, si cada objeto tiene métodoEquals, lo que hace posible la comparación de valores, ¿por qué alguien alguna vez realizaríavalo (no referencia) comparación usandox == y declaración?

Supongo que no entiendo algo, porque esto me parece muy extraño.

Respuestas a la pregunta(3)

Su respuesta a la pregunta