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 :

interface et surcharge d'operateur.


Sujet :

C#

  1. #1
    Membre confirmé
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Juin 2005
    Messages
    700
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Tourisme - Loisirs

    Informations forums :
    Inscription : Juin 2005
    Messages : 700
    Points : 488
    Points
    488
    Par défaut interface et surcharge d'operateur.
    Je suis face à un sacré probleme, j'espere que vous pourrez m'aider...

    J'ai une classe MaClasse pour laquelle j'ai surchargé les operateurs == et != sans quoi le == par defaut retourne toujours false vu que certaines propriétés sont des references... bref...
    Je l'ai fait, et ca fonctionnait tres bien.

    Afin d'inverser les dépendances et que tout mon programme ne dépende pas de MaClasse, j'ai extrait une interface IMaClasse.

    Probleme : on ne peut pas définir de surcharge d'operateur dans une interface.
    Du coup , lorsque je fais une comparaison :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    IMaclasse obj1 = blablabla
    IMaclasse obj2 = blablabla
    if(obj1 == obj2)
      gnagnagna
    la ligne obj1 == obj2 utilise l'operateur par defaut qui retourne toujours false.

    J'ai partiellement contourné le probleme, en rajoutant à mon interface :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    interface IMaclasse
    {
    ...
    bool Equals(object obj);
    }
    puis dans ma classe :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    class MaClasse
    {
    public override bool Equals(object obj)
    {
    return this == (MaClasse)obj;
    }
    }
    mais du coup, mon code fonctionne que si je passe par Equals, pas si j'utilise ==.

    Auriez vous une solution pour que mon obj1 == obj2 passe bien par mon operateur surchargé?

    Un train grand merci d'avance pour votre aide.

  2. #2
    Expert éminent
    Avatar de StormimOn
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2005
    Messages
    2 593
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Sarthe (Pays de la Loire)

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

    Informations forums :
    Inscription : Mai 2005
    Messages : 2 593
    Points : 7 660
    Points
    7 660
    Par défaut
    C'est impossible d'utiliser la surcharge des opérateurs avec une interface. La seule solution valable c'est d'enlever la surcharge des opérateurs et de passer uniquement pas la redéfinition de la méthode Equals sur tes objets pour tester leur égalité.

    Pour moi l'opérateur == est une commodité pour tester l'égalité des références (plus clair que de mettre des ReferenceEquals partout). Pour tester l'égalité des objets en terme de données la méthode Equals est la plus adaptée.

    C'est d'ailleurs pour cette raison que si l'on redéfini l'opérateur == afin de tester non plus l'égalité des référence mais l'égalité des "valeurs" il faut aussi redéfinir la méthode Equals, car par défaut elle testerait l'égalité des références (perte de cohérence donc). Alors que l'inverse n'est pas vrai, on peut redéfinir la méthode Equals sans avoir besoin de redéfinir l'opérateur ==

Discussions similaires

  1. est ce possible de surcharger les operateurs
    Par dietrich dans le forum Delphi
    Réponses: 5
    Dernier message: 26/08/2006, 11h15
  2. Surcharge d operateur ==
    Par flipper203 dans le forum C++
    Réponses: 15
    Dernier message: 05/07/2006, 01h54
  3. [POO] surcharge d'operateur
    Par wamania dans le forum Langage
    Réponses: 6
    Dernier message: 20/04/2006, 14h31
  4. surcharge des operateurs de flux
    Par icer dans le forum C++
    Réponses: 6
    Dernier message: 22/02/2006, 09h02
  5. [POO] Surcharge d'opérateurs []
    Par Amnesiak dans le forum Langage
    Réponses: 28
    Dernier message: 11/11/2005, 12h44

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