No es necesariamente importante; depende del tamaño de sus colecciones y sus requisitos de rendimiento y de si su clase se utilizará en una biblioteca donde es posible que no conozca los requisitos de rendimiento. Con frecuencia sé que los tamaños de mi colección no son muy grandes y mi tiempo es más valioso que unos pocos microsegundos de rendimiento obtenidos al crear un código hash perfecto; entonces (para deshacerme de la molesta advertencia del compilador) simplemente uso:
public override int GetHashCode()
{
return base.GetHashCode();
}
(Por supuesto, también podría usar un #pragma para desactivar la advertencia, pero prefiero de esta manera).
Cuando se encuentre en la posición que usted no necesita el rendimiento de todos los problemas mencionados por otros aquí se aplican, por supuesto. Lo más importante : de lo contrario, obtendrá resultados incorrectos cuando recupere elementos de un conjunto o diccionario de hash : el código de hash no debe variar con la vida útil de un objeto (más exactamente, durante el tiempo cada vez que se necesita el código de hash, como una clave en un diccionario): por ejemplo, lo siguiente es incorrecto ya que Value es público y, por lo tanto, se puede cambiar externamente a la clase durante el tiempo de vida de la instancia, por lo que no debe usarlo como base para el código hash:
class A
{
public int Value;
public override int GetHashCode()
{
return Value.GetHashCode(); //WRONG! Value is not constant during the instance's life time
}
}
Por otro lado, si el valor no se puede cambiar, está bien usarlo:
class A
{
public readonly int Value;
public override int GetHashCode()
{
return Value.GetHashCode(); //OK Value is read-only and can't be changed during the instance's life time
}
}