Avatar billede downloading Nybegynder
10. maj 2011 - 23:05 Der er 5 kommentarer og
1 løsning

Spørgsmål vedr. GetHashCode i custom class

Jeg har et spørgsmål som jeg slet ikke kan finde ud af at gribe an. Er der nogle der kan hjælpe mig igang?

Spørgsmål: Consider the custom C# reference type - described below - in
which the equals operator is overridden: Which of these requirements
should be true for GetHashCode when implementing it in the custom
class?

[code]public class something
{
private int a;
public something(int, newA)...
public override bool Equals(object obj)..
}[/code]

Mine svarmuligheder er:
1) There are no requirements. since GetHashCode is used only by value
types
2) If two different objects of the same type are considered equal using
their equals operator, their hash code must be identical. The opposite is
NOT required
3) If two different objects of the same type are considered equal using
their equals operator, their hash code must be identical. The opposite IS
required

Tak..
Avatar billede arne_v Ekspert
10. maj 2011 - 23:16 #1
#2 er korrekt.

equals ===> samme hash code

samme hash code =!=> equals
Avatar billede downloading Nybegynder
10. maj 2011 - 23:35 #2
okay.. Så det samme som at hash koden for to ens filer altid vil være den samme, men at to forskellige filer godt kan have samme hash kode?

Tak :)
Avatar billede arne_v Ekspert
10. maj 2011 - 23:40 #3
Ja.
Avatar billede ulrikm Nybegynder
10. maj 2011 - 23:53 #4
Du kan tænke på, hvad der sker, hvis du bruger objekter af den klasse som nøgler i en Hashtable - her bruges GetHashode til at gemme nøglen og finde den igen (sammen med den tilhørende værdi).

Hvis nu et objekt efter tilføjelse til Hashtable er "det samme" (altså mht equals), virker det rimeligt, at man stadig kan bruge det til at slå op i Hashtable med.

Hvis objektet er modificeret, så equals nu returnerer noget andet end ved tilføjelsen til Hashtable, er det så at sige ikke længere det samme objekt, og kan ikke længere bruges til at finde værdien i Hashtable med.

At forskellige objekter ikke behøver være "unequal" når deres hash codes er forskellige, betyder at man kan mappe forskellige objekter til samme hash code, og det giver mening, da en hashcode er en kondenseret udgave af dit objekt. Ellers ville det også være svært at lave en Int32 værdi fra et vilkårligt objekt. Nu er jeg ikke matematiker, men man forsøger gerne at lave så stor spredning som muligt på hash codes, så der er mindre sandsynlighed for at ramme samme værdi med to forskellige objekter - så er de hurtigere at finde i en Hashtable.
Avatar billede downloading Nybegynder
11. maj 2011 - 09:46 #5
Mange tak for jeres svar :) Det hjalp rigtig meget.. Vil du ikke skrive et svar arne_v? Du kom jo først, men dit svar hjalp også ulrikm.. Tak.
Avatar billede arne_v Ekspert
11. maj 2011 - 15:07 #6
svar
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester