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

C# Discussion :

methode Equals et interface IEquatable


Sujet :

C#

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé Avatar de ZaaN
    Inscrit en
    Novembre 2005
    Messages
    819
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 819
    Par défaut methode Equals et interface IEquatable
    Hello,
    je cherche a connaitre la difference entre ces deux methodes :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    bool IEquatable<(Of <(T>)>)::Equals()
    bool Object::Equals()
    Il me semble que sémantiquement c'est la meme chose. --> Quel interret à l'interface IEquatable<...> ??

    merci

  2. #2
    Membre Expert Avatar de Guulh
    Homme Profil pro
    Inscrit en
    Septembre 2007
    Messages
    2 160
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Septembre 2007
    Messages : 2 160
    Par défaut
    object.Equals(object other);
    IEquatable<T>.Equals(T other);

    L'un est typé, l'autre pas. Mais je sais pas si c'est tout.

  3. #3
    Membre Expert Avatar de Tober
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juillet 2007
    Messages
    824
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Luxembourg

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2007
    Messages : 824
    Par défaut
    a mon avis, le object.Equals(object other) regarde seulement la reference des objets pour des classes a toi exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    test t1 = new test(), t2 = new test();
                t1.a = 0;
                t1.b = 0;
                t2.a = 0;
                t2.b = 0;
                if (t1.Equals(t2))
                {
                    MessageBox.Show("Ok");
                }
     
            public class test
            {
                public int a, b;
            }
    Ce code n'affiche pas ok, pourtant t1 et t2 sont "egaux", mais l'ordi peut pas deviner que etre egaux pour toi veux dire ca...
    c'est pour cela que tu peux utiliser ton interface IEquatable je pense...
    et meme si tu peux overrider la fonction equals ds la classe, ca reste un equals non type comme l'a dit Guulh...

    L'utilite principale que je vois, c'est de pouvoir avoir plusieurs test d'egalite possible pour plusieurs types par exemple... au lieu de faire un test du type dans le Equals, tu as une fonction pour chaque type, ce qui est beaucoup plus propre je pense.

  4. #4
    Membre éprouvé
    Avatar de _skip
    Homme Profil pro
    Développeur d'applications
    Inscrit en
    Novembre 2005
    Messages
    2 898
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur d'applications
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Novembre 2005
    Messages : 2 898
    Par défaut
    Ca a particulièrement du sens lorsque tu écris ce genre de code :


    class MyObject : IEquatable<MyObject>, IEquatable<MyOtherObject>
    {
    ...

    public bool Equals(MyObject obj)
    {
    return this._myMember == obj.MyMember;
    }

    public bool Equals(MyOtherObject obj)
    {
    return this._myMember == obj.OtherMember ;
    }
    Ca permet donc de définir explicitement dans la signature d'un objet que ce dernier peut supporter une comparaison d'égalité avec un autre type.

    Si tu fais une méthode
    int ComparerObject( IEquatable<MaClasse> )

    Seuls les objets qui supporte une comparaison d'égalité avec une instance de MaClasse pourront être passés, et encore faudra-t-il qu'ils définissent l'interface.

  5. #5
    Membre éclairé Avatar de ZaaN
    Inscrit en
    Novembre 2005
    Messages
    819
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 819
    Par défaut
    ok

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

Discussions similaires

  1. Generer la methode equals avec wsimport
    Par stillman dans le forum Services Web
    Réponses: 1
    Dernier message: 25/06/2008, 15h31
  2. Réponses: 3
    Dernier message: 13/11/2007, 15h43
  3. Cherche exemple sur la methode Equal
    Par smutmutant2003 dans le forum Langage
    Réponses: 3
    Dernier message: 07/03/2007, 11h02
  4. Imposer une methode Equals pour une recherche dans une List
    Par petozak dans le forum Débuter avec Java
    Réponses: 5
    Dernier message: 03/10/2006, 10h41
  5. [Language] Redéfinition de la méthode equals
    Par nak dans le forum Langage
    Réponses: 2
    Dernier message: 08/12/2005, 08h56

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