example - hashcode equals c#
Por qué GetHashCode no es una propiedad como HashCode en.NET (6)
Debe recordar que .NET Framework está diseñado para acceder a una amplia variedad de idiomas.
En teoría, podrías crear un compilador que no sea capaz de anular correctamente las propiedades. Si bien eso sería un buen compilador, no sería necesariamente ilegal. (Recuerde que las propiedades son solo métodos con algunos metadatos)
¿Por qué GetHashCode no es una propiedad como HashCode en .NET?
Probablemente porque requiere un cálculo, y exponerlo como una propiedad podría implicar que el código hash ya está disponible de forma gratuita.
Editar: Pautas sobre esto: Propiedades versus métodos
"La operación es lo suficientemente cara como para querer comunicarle al usuario que debe considerar almacenar en caché el resultado".
Quizás GetHashCode es lo suficientemente caro en algunos casos.
las propiedades solo deben usarse si el cálculo detrás de ellas es realmente rápido o en caché
además la mayoría de las veces la única lógica en propiedades debería ser la validación
Además de que una propiedad no es más que un getter y un método setter, desde el punto de vista del diseño, una propiedad nunca debe contener cálculos distintos a la inicialización o validación, por ejemplo:
private object _obj;
public object Obj
{
get
{
if(_obj == null)
{
_obj = new object();
}
return _obj;
}
set
{
if(value == badvalue)
{
throw new ArgumentException("value");
}
_obj = value;
}
}
GetHashCode () no contiene cálculos extensos, pero podría contener operaciones de ejecución tan larga (solo por el hecho de que podría calcular el código de hash de un objeto de una manera compleja), esta es la razón por la cual es un método en lugar de una propiedad.
A menudo no es posible definir un HashCode para una clase que hace desde:
por ejemplo, los objetos de la clase no tienen un concepto de identidad bien definido.
Por lo tanto, es común hacer que el método GetHashCode () arroje una NotImplementedException. Esto resolvería todo tipo de problema si HashCode fuera una propiedad, ya que la mayoría de las personas (y depuradores) asumen que siempre es válido obtener el valor de una propiedad.
No creo que haya una buena razón. Cualquier implementación de GetHashCode
debe ser lo suficientemente rápida como para ponerla en una propiedad. Dicho esto, hay muchos defectos de diseño en .Net framework, algunos pequeños, otros serios. Esto parece pequeño.