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 :

Integration de l'opérateur ==


Sujet :

C#

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éprouvé Avatar de Flow_75
    Femme Profil pro
    Ingénieure
    Inscrit en
    Mai 2005
    Messages
    1 100
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieure
    Secteur : Transports

    Informations forums :
    Inscription : Mai 2005
    Messages : 1 100
    Par défaut Integration de l'opérateur ==
    Bonjour,

    J'ai une classe à laquelle je souhaite définir l'opérateur == pour pouvoir simplifier mes opérations de comparaisons.

    Mais depuis que je l'ai défini par cela:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    class operateur
    {
     
    public static bool operator==(operateur op1, operateur op2)
    {
       return(op1.id == op2);
    }
    };
    Depuis lors, si je veux vérifier que l'instance d'un opérateur est définie:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    .... mon code ....
    operateur theoperateur;
     
    if(theoperateur == null)
    {
     
     
    }
     
    ------ la suite ------------
    Alors, j'ai un problème car il passe dans l'opérateur== et donc crashe.

    Évidemment, si je teste dans l'opérateur== que l'op2 est null, ca va tourner en boucle....

    Pourriez vous m'aider ?

    Merci.
    F.

  2. #2
    Rédacteur/Modérateur
    Avatar de beekeep
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2006
    Messages
    2 005
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Octobre 2006
    Messages : 2 005
    Par défaut
    Bonjour,

    il y a la méthode Object.Equals. Ça permet ensuite d'utiliser les IComparable etc.

  3. #3
    Membre éprouvé Avatar de Flow_75
    Femme Profil pro
    Ingénieure
    Inscrit en
    Mai 2005
    Messages
    1 100
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieure
    Secteur : Transports

    Informations forums :
    Inscription : Mai 2005
    Messages : 1 100
    Par défaut
    Bonjour,

    Merci de ton aide.
    Malheureusement, c'est toujours le meme soucis :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
            public static bool operator !=(Operateur op1, Operateur op2)
            {
                if (op2.Equals(null))
                    return true;
                return (op1.id!= op2.id);
            }

  4. #4
    Membre extrêmement actif
    Inscrit en
    Avril 2008
    Messages
    2 573
    Détails du profil
    Informations personnelles :
    Âge : 65

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 573
    Par défaut
    BONJOUR

    Ton class doit implementer Equals et GetHashCode ....
    Sur ce lien MSDN ,il y a un exemple de code complet intitule "Guidelines for Overloading Equals() and Operator == (C#)" :
    lien :

    https://www.google.fr/url?sa=t&rct=j...KYAoNoDOVw9AhQ

    bon code....

  5. #5
    Expert confirmé

    Homme Profil pro
    Responsable déploiement (SCCM, InTune, GPO)
    Inscrit en
    Juillet 2014
    Messages
    3 218
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Responsable déploiement (SCCM, InTune, GPO)
    Secteur : Transports

    Informations forums :
    Inscription : Juillet 2014
    Messages : 3 218
    Par défaut
    Ton opérateur == est devenu != ?
    Tu peut faire ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    .... mon code ....
    operateur theoperateur;
     
    if((object)theoperateur == null)
    {
     
     
    }

  6. #6
    Rédacteur/Modérateur
    Avatar de beekeep
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2006
    Messages
    2 005
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Octobre 2006
    Messages : 2 005
    Par défaut
    C'est expliqué dans la doc sur Object.Equals.

    Lorsqu'on redéfinit les opérateurs il faut aussi redéfinir la méthode Equals pour faire la même chose.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    public struct Complex {
        public double re, im;
    
       public override bool Equals(Object obj) {
          return obj is Complex && this == (Complex)obj;
       }
    
       public override int GetHashCode() {
          return Tuple.Create(re, im).GetHashCode();
       }
    
       public static bool operator ==(Complex x, Complex y) {
          return x.re == y.re && x.im == y.im;
       }
    
       public static bool operator !=(Complex x, Complex y) {
          return !(x == y);
       }
    
        public override String ToString()
        {
           return String.Format("({0}, {1})", re, im);
        } 
    }

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

Discussions similaires

  1. opérateur non applicable à ce type d'opérande
    Par Amon dans le forum Langage
    Réponses: 3
    Dernier message: 11/06/2003, 18h07
  2. integration de repertoire dans ma webapp
    Par thomy dans le forum JBuilder
    Réponses: 2
    Dernier message: 04/06/2003, 10h34
  3. calcul integral en c
    Par Anonymous dans le forum C
    Réponses: 3
    Dernier message: 11/01/2003, 11h32
  4. [imprecis]Réaliser a^n avec seulement l'opérateur d'addition
    Par Amon dans le forum Algorithmes et structures de données
    Réponses: 18
    Dernier message: 08/11/2002, 22h22
  5. Réponses: 10
    Dernier message: 27/08/2002, 23h24

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