lunes, 14 de marzo de 2011

Dudas alumnos. Cómo saber si dos referencias apuntan al mismo objeto.

A diferencia de otros lenguajes similares, como Java, en C# es posible comparar dos cadenas utilizando el operador de igualdad == sin miedo a que en vez de comparar el contenido al que apuntan las referencias esté comparando las referencias mismas. Es decir, que para la siguiente declaración de cadenas,

string str1 = "abc", str2="abc";

en la que se crean dos instancia diferentes de la misma cadena, la expresión str1.Equals(str2) y la expresión str1==str2 devolverían True en ambos casos. Si quisiéramos comprobar si se trata de dos instancias diferentes tendríamos que usar el método ReferenceEquals de la clase Object. Así, y para el caso anterior, System.Object.ReferenceEquals(str1, str2) devolvería False ya que cada referencia apunta a instancias distintas. Para hacer que dos referencias de cadenas apunten a la misma instancia hay que emplear la instrucción de asignación, sin más,

string str1="abc", str2;
str2 = str1;

Para este ejemplo, System.Object.ReferenceEquals(str1, str2) devolvería True. Otra forma equivalente de hacer que str2 tome la referencia del objeto referenciado por str1 sería utilizar el método ToString de la superclase Object:

string str1="abc", str2;
str2 = str1.ToString();


No hay comentarios:

Publicar un comentario