Mutlaka önemli değildir; koleksiyonlarınızın boyutuna ve performans gereksinimlerinize ve sınıfınızın performans gereksinimlerini bilmediğiniz bir kütüphanede kullanılıp kullanılmayacağına bağlıdır. Koleksiyon boyutlarının çok büyük olmadığını ve zamanımın mükemmel bir karma kodu oluşturarak elde edilen birkaç mikrosaniye performanstan daha değerli olduğunu sık sık biliyorum; yani (derleyici tarafından rahatsız edici uyarı kurtulmak için) Ben sadece kullanın:
public override int GetHashCode()
{
return base.GetHashCode();
}
(Tabii ki uyarıyı da kapatmak için #pragma kullanabilirim ama bu yolu tercih ederim.)
Eğer konumda olduğunda bunu yapmak Burada elbette uygulamak başkaları tarafından bahsedilen sorunların hepsinden daha performansı gerekir. En önemlisi - aksi takdirde, bir karma kümesinden veya sözlükten öğe alırken yanlış sonuçlar alırsınız: karma kodu, nesnenin yaşam süresine göre değişmemelidir (daha doğru, karma kodunun gerektiği zaman, örneğin, sözlükte bir anahtar)): örneğin, Değer herkese açık olduğu için aşağıdakiler yanlıştır ve bu nedenle örneğin yaşam süresi boyunca sınıfa harici olarak değiştirilebilir, bu nedenle hash kodu için temel olarak kullanmamalısınız:
class A
{
public int Value;
public override int GetHashCode()
{
return Value.GetHashCode(); //WRONG! Value is not constant during the instance's life time
}
}
Öte yandan, Değer değiştirilemezse kullanmakta fayda vardır:
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
}
}