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:
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.