Ayer mientras publicaba un ejemplo sobre variables por referencia y comparación de objetos -como respuesta a una pregunta hecha en un foro, me surgió el siguiente problema:

using System;

class Program
{
    static void Main(string[] args)
    {
        object a = new object();
        object b = a; // [1]

        a = "test"; // [2]

        Console.WriteLine(a == b);
    }
}

Por algún motivo la expresión a == b evalúa a falso, aún cuando se sabe que en [1] a y b deberían tener la misma referencia para el objeto creado en el paso anterior. En [2] asigno un string para evitar problemas con el boxing/unboxing entre variables por referencia y por valor, he probado asignando otros objetos también pero sin ningún efecto sobre el resultado final.

Lo curioso de esto es que si se comenta [2], esta vez la expresión evalúa a verdadero, resultado que confirma que a y b tienen la misma referencia -cabe recordar que tanto el operador = como el método Equals sólo comparan referencias.

No sé si esto es un bug o feature, en todo caso, estaré muy agradecido si alguien me ahorra tiempo de búsqueda para absolver esta pequeña duda.

Nota: sé que es difícil que el código mostrado pueda aparecer en una determinada aplicación.