Frage zu GetHashCode von Objekten?



  • Hallo, ich will instanzierte Objekte gleichen types unterscheiden. Liefert mit die GetHashCode(); funktion eindeudigte Schlüssel zu object instanzen? Laut msdn ist die funktion nütlich zum hashtable von objekte anzulegen.. aber es wird nich gewährleistet das die Hashkey immer eindeudtig sind. Hab ich das richtig verstanden?



  • Warum verwendest du nicht eine Guid? Da wird garantiert das sie eindeutig ist.



  • ok, überredet;)



  • Object.ReferenceEquals funktioniert nicht für deine Zwecke?

    Ansonsten hast du richtig verstanden, das GetHashCode nicht eindeutig ist.



  • PuppetMaster2k schrieb:

    Warum verwendest du nicht eine Guid? Da wird garantiert das sie eindeutig ist.

    Weil GetHashCode einen int zurück liefert.

    BorisDieKlinge schrieb:

    ...
    Liefert mit die GetHashCode(); funktion eindeudigte Schlüssel zu object instanzen?
    ...

    Wenn zwei Objekte gleich sind, dann sollte ihr HashCode gleich sein. Wenn sie ungleich sind, dann darf der Code trotzdem gleich sein (Hash-Kollision). Deswegen muss man auch Equals überschreiben, wenn man GetHashCode überschreibt...



  • ja ich hätte halt über den Hashcode statt 16 Byte(Guid) nur 4 Byte.

    Wie wird den die Guid erzeugt, damit sie IMMER Eindeudig ist? Würde ich ne schleife machen, diese 2 wochen laufen lassen und darin nur GUID erzeugen, müssen ja mal zwei gleiche vorkommen? Denke es wird die Aktuelle Zeit verwendet umd diese zu berechnen..



  • naja , ich hab nen Datenübertragungs puffer, welcher zu jedem Datenpacke eine eindeudige Handle haben muss. Wenn die Daten übertragen werden, und ich ein Ack bekommen, soll das Acknolage das Handle des übertragenen Objectes liefern;)



  • Wie kann man nur so unselbstständig sein?! Such doch einfach die MSDN und Google ab. Da gibts zu Hauf Informationen.



  • PuppetMaster2k schrieb:

    Wie kann man nur so unselbstständig sein?! Such doch einfach die MSDN und Google ab. Da gibts zu Hauf Informationen.

    mittlerweile sollte bekannt sein, dass er davon nichts hält... naja.. hier wird ihm ja trotzdem immer brav geholfen



  • ich geb dir mal ein einfaches beispiel
    angenommen ich nehm deine festplatten ID
    dann das mainboard installations datum
    x = ID * datum
    wann waerst du schonmal sehr sicher, aber noch nicht sicher genug
    nun setz ich noch das aktuelle darum bis auf millisekunden hinten drann
    x + 200928010859451234

    waere nun wirklich eindeutig
    man muesste auf die milisekunde genau, und mit der selben hardware mit der selben funktion eine id generieren um ein identisches zu bekommen
    da noch andere faktoren hinzu und fertig ist - eindeutiger geht es nicht mehr (es koennen auch andere faktoren hinein berechnet werden welche am selben pc in einer schleife keine gleichen ergebnisse heraus geben)

    schau mal wiki - da ist eine formen wie wahrscheinlich es ist: http://de.wikipedia.org/wiki/GUID



  • Wie kann man nur so unselbstständig sein?! Such doch einfach die MSDN und Google ab. Da gibts zu Hauf Informationen.

    Was geht? Ich informierte mich bei MSDN was mit "GetHashCode" liefert, und wollte trozdem noch mal euer feedback dazu wie eindeudtig es ist. GUID kannte ich schon, wollte aber trozdem noch ne Alternative Objekt Instanz technisch gesehen. Die gabs wohl net, also nimm ich GUID. 👍



  • evil schrieb:

    ich geb dir mal ein einfaches beispiel
    angenommen ich nehm deine festplatten ID
    dann das mainboard installations datum
    x = ID * datum
    wann waerst du schonmal sehr sicher, aber noch nicht sicher genug
    nun setz ich noch das aktuelle darum bis auf millisekunden hinten drann
    x + 200928010859451234

    waere nun wirklich eindeutig
    man muesste auf die millisekunde genau, und mit der selben hardware mit der selben funktion eine id generieren um ein identisches zu bekommen
    da noch andere faktoren hinzu und fertig ist - eindeutiger geht es nicht mehr (es koennen auch andere faktoren hinein berechnet werden welche am selben pc in einer schleife keine gleichen ergebnisse heraus geben)

    würde ich aber mehrer ID's hintereinader generieren lassen, würde Millisekunden als auflösung nioch mehr reichen;)



  • BorisDieKlinge schrieb:

    würde ich aber mehrer ID's hintereinader generieren lassen, würde Millisekunden als auflösung nioch mehr reichen;)

    Boris, langsam nervst du. Es gibt in nahezu jeden Framework eine Möglichkeit eine GUID erzeugen zu lassen - wozu hier über Kleinigkeiten reden.

    Du hast erfolgreich studiert, du solltest mindestens gelernt haben, wie man sich selbst Wissen aneignet - ansonsten hoffe ich das dein AG dich auch nur nach deiner Leistung bezahlt. Ich kenne viele Unstudierte und Leute mit abgebrochenen Studium die weitaus mehr Eigeninitiative zeigen.



  • BorisDieKlinge schrieb:

    würde ich aber mehrer ID's hintereinader generieren lassen, würde Millisekunden als auflösung nioch mehr reichen;)

    genau darum sagte ich ja

    evil schrieb:

    ... (es koennen auch andere faktoren hinein berechnet werden welche am selben pc in einer schleife keine gleichen ergebnisse heraus geben)

    rechte doch in der schleife die durchlauf anzahl hinzu - weiss der gaier, gibt doch viele moeglichkeiten

    mit den GUIDs bekommst du globale eindeutigen identifier - wozu versuchen es zu umgehen ? was versprichst du dir davon ?
    versuch doch mal zwei gleiche GUIDs zu erzeugen (.NET object zu verwenden) - viel spass dabei



  • Hmm.. naja andere Leute juckt es nich was im Kern passiert, sie nehmens so hin wie es ist.

    Ich nehm die Frage zurück.

    @Evil: Ich will das doch net umgehen:) Ich hab habe mir nur gedanken gemacht was dahinter steckt:) Würde ja gerne die Referenz eines Objectes als ID haben, welche ja im prinzip eindeudig sein muss... In C++ hätte ich die Speicher adresse verwendet, aber beim GC kann ich das halt net so machen:)

    Naja egal, Thema erledigt.



  • asc schrieb:

    Du hast erfolgreich studiert, du solltest mindestens gelernt haben, wie man sich selbst Wissen aneignet - ansonsten hoffe ich das dein AG dich auch nur nach deiner Leistung bezahlt. Ich kenne viele Unstudierte und Leute mit abgebrochenen Studium die weitaus mehr Eigeninitiative zeigen.

    hehe:

    asc schrieb:

    BorisDieKlinge schrieb:
    ich bin erst 13...

    BorisDieKlinge schrieb:
    ...arbeite seit einem guten Jahr in meinem Betrieb, und bekomme als Dipl. Informatikter...

    Ich wusste noch garnicht das wir Kinderarbeit in Deutschland zulassen (und vor allem mit 12 Jahren Dipl.Inf.) 😉



  • [quote="BorisDieKlinge"]Hmm.. naja andere Leute juckt es nich was im Kern passiert, sie nehmens so hin wie es ist./quote]

    Und manche Leute juckt es noch nicht einmal was an der Oberfläche passiert und offensichtlich in der Dokumentation steht.



  • BorisDieKlinge schrieb:

    @Evil: Ich will das doch net umgehen:) Ich hab habe mir nur gedanken gemacht was dahinter steckt:) Würde ja gerne die Referenz eines Objectes als ID haben, welche ja im prinzip eindeudig sein muss... In C++ hätte ich die Speicher adresse verwendet, aber beim GC kann ich das halt net so machen:)

    Naja egal, Thema erledigt.

    verpass dem objekt doch ein property welches eine ID repraesentiert, dann weist du diesem beim erstellen eine GUID zu und du hast dahin gehen ausgesorgt {=



  • Ein UInt64 Counter reicht normalerweise auch.
    Und lock(blah) { return counter++; } sollte krass viel schneller sein als UuidCreate() .
    Nur so nebenbei erwähnt...


Anmelden zum Antworten