IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage Delphi Discussion :

Une même instance d'un objet peut-elle retourner une valeur différente pour GetHashCode ?


Sujet :

Langage Delphi

  1. #1
    Membre régulier
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2012
    Messages
    114
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2012
    Messages : 114
    Points : 70
    Points
    70
    Par défaut Une même instance d'un objet peut-elle retourner une valeur différente pour GetHashCode ?
    Bonjour,

    J'utilise GetHashCode pour identifier de manière unique un objet sur mon application.
    Je voulais savoir si au cours de la vie d'une instance d'un objet, la méthode GetHashCode peut retourner une valeur différente ?

    Je n'ai pas overrider cette méthode, et je constate un problème aléatoire sur une partie du code qui fait des tests sur des objets.
    En gros ce que je fait:
    1. Je stocke le Hashcode d'un objet (OBJET1).
    2. Je fais des traitements sur cet objet, qui peut stocker des données différence en mémoire.
    3. D'autres objets de la même classe que OBJET1, peuvent être créés.
    4. Je vérifie que l'objet qui appelle une certaine méthode est bien OBJET1 (en vérifiant les hashcode), si oui je fait un traitement.

    Mais aléatoirement en 4 le traitement ne se fait pas, alors que je suis sûr que OBJET1 appelle la méthode.

    Est-il préférable que j'utilise le pointer de OBJET1 ?

    Merci de votre aide.

  2. #2
    Membre émérite
    Avatar de ALWEBER
    Homme Profil pro
    Expert Delphi
    Inscrit en
    Mars 2006
    Messages
    1 496
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 69
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Expert Delphi

    Informations forums :
    Inscription : Mars 2006
    Messages : 1 496
    Points : 2 762
    Points
    2 762
    Billets dans le blog
    10
    Par défaut
    La création d'un objet génère l'instance en mémoire et retourne l'adresse dans l'objet qui n'est en fait qu'un pointeur sur cette adresse (voir déréférencement en Delphi). Donc sauf cas particulier le hashcode n'a pas d'intérêt en Delphi. Donc utiliser plutôt l'adresse mémoire du style
    Integer(Pointer(MonObjet))

  3. #3
    Expert éminent sénior
    Avatar de Paul TOTH
    Homme Profil pro
    Freelance
    Inscrit en
    Novembre 2002
    Messages
    8 964
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Freelance
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2002
    Messages : 8 964
    Points : 28 445
    Points
    28 445
    Par défaut
    By default, calling GetHashCode on an object returns an integer representing the virtual address at which the object is stored.
    c'est à dire que par défaut, GetHashCode retourne tout simplement l'adresse de l'objet et dans ce cas en effet, il suffit de créer un objet le supprimer, le recréer et on a de bonnes chances d'avoir le nouvelle instance à la même adresse que la précédente, et donc le même HashCode.

    personnellement j'utilise un TGUID pour identifier un objet de façon unique.
    Developpez.com: Mes articles, forum FlashPascal
    Entreprise: Execute SARL
    Le Store Excute Store

  4. #4
    Membre régulier
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2012
    Messages
    114
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2012
    Messages : 114
    Points : 70
    Points
    70
    Par défaut
    Bonjour,

    J'ai vu lors de mes recherches, qu'il était possible que 2 objets différents pouvaient retourner 2 hashcodes identiques. Mais si la méthode retourne l'adresse cela ne devrait pas être possible.

    Je vais dans un premier temps faire des essais en utilisant l'adresse du pointer et voir si le problème persiste.

    Merci pour vos réponses.

+ Répondre à la discussion
Cette discussion est résolue.

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo