comparar objetos

28/04/2006 - 17:52 por miquel busom | Informe spam
hola,
Tengo una clase asi
class client
{
private string _ip;
private string _nom;
public client (string ip, string nom) {_ip = ip; _nom = nom;}
public string nom {get {return _nom;}
public string ip {get {return _ip;}
}

si hago esto
client a = new client("192.0.0.0", "a");
client b = new client("192.0.0.0", "a");
(o sea, a y b son iguales)
a.equals(b) dá falso. Y a==b tambien dá falso.

luego he añadido en la clase client
public override bool Equals(object obj)
{
client c = (client)obj;
return c.ip == _ip && c.nom == _nom;
}

y con esto, a.equals(b) me dá true, que es lo que queria.

pregunto:
a) Esta es la única forma de comparar dos objetos?
b) Porque haciendo el override de Equals, el compilador me lanza la
advertencia de que ojo! que estoy sobreescribiendo EQUALS pero que no estoy
sobreescribiendo GETHASHCODE?

Muchas grácias
Miquel

Preguntas similare

Leer las respuestas

#1 Alberto Poblacion
28/04/2006 - 19:10 | Informe spam
"miquel busom" wrote in message
news:
a) Esta es la única forma de comparar dos objetos?



Hay más. Por ejemplo, puedes implementar el interface IComparable en tu
clase, y luego comparar usando Compare(). También puedes hacer un override
del operador ==, pero se recomienda que en ese caso la implementación del ==
coincida con el override de Equals.

b) Porque haciendo el override de Equals, el compilador me lanza la
advertencia de que ojo! que estoy sobreescribiendo EQUALS pero que no
estoy
sobreescribiendo GETHASHCODE?



La documentación de Microsoft recomienda que siempre que dos objetos
sean iguales, tengan el mismo hashcode. Si cambias el criterio de igualdad
(redefiniendo Equals), entonces también tendrías que redefinir el
GetHashCode de tal manera que los objetos iguales devuelvan el mismo hash.
Si no lo haces, no te funcionará bien, por ejemplo, crear un Hashtable y
rellenarlo de objetos de tu clase, y luego buscar uno de ellos.
email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida