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

Windows Forms Discussion :

[operator] Redéfinition d'un Cast


Sujet :

Windows Forms

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Inscrit en
    Octobre 2004
    Messages
    359
    Détails du profil
    Informations forums :
    Inscription : Octobre 2004
    Messages : 359
    Par défaut [operator] Redéfinition d'un Cast
    Bonjour,

    J'aimerai redéfinir un cast de ma class Monnaie, il me semble que le Cast est considéré comme un operator ?
    Comment on s'en sert ?

    Ma classe est toute simple, c'est un double + String, et j'aimerai quand je reçoit un nombre quelconque pouvoir le caster en Monnaie. (avec des surcharge int et decimal)

    Merci

    ça ne fonctionne pas comme ça...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
            public static Monnaie operator (Monnaie(int))
            {
            }

  2. #2
    Inactif  
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Janvier 2007
    Messages
    6 604
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet NTIC

    Informations forums :
    Inscription : Janvier 2007
    Messages : 6 604
    Par défaut
    Pas tout à fait.

    La syntaxe exact de redéfinition du cast explicite c'est :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    public static explicit operator Monnaie(OldType oldTypeValue)
    {
         Monnaie newValue;
    // conversion  ici
    // ......
       return newValue;
    }
    Cette définition étant à faire dans la classe OldType, et s'utilise ensuite comme un cast :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     OldType myValue;
    Monnaie monnaieValue = (Monnaie)myValue;
    Dans le cas, que tu décris, c'est impossible (enfin ... je crois), car il faudrait que tu rajoutes la redéfinition à int.( peut être est ce néanmoins possible en C# 3.0/.Net 3.5, avec les méthodes d'extensions, mais là, il faut demander à plus compétent que moi : j'ignore si les méthodes d'extensions sont applicables aux types valeurs et de plus en redéfinition d'opérateur - allo, les spécialistes ?).

  3. #3
    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
    C'est possible, cher BlueDeep
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    class Monnaie
    {
      private int UnTrucEntier;
      public Monnaie(int i)
      {
        this.UnTrucEntier = i;
      }
      public static explicit operator int(Monnaie m) { return m.UnTrucEntier; }
      public static explicit operator Monnaie(int i) { return new Monnaie(i); }
    }

  4. #4
    Membre éclairé
    Inscrit en
    Octobre 2004
    Messages
    359
    Détails du profil
    Informations forums :
    Inscription : Octobre 2004
    Messages : 359
    Par défaut
    Merci beaucoup tout les 2

  5. #5
    Inactif  
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Janvier 2007
    Messages
    6 604
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet NTIC

    Informations forums :
    Inscription : Janvier 2007
    Messages : 6 604
    Par défaut
    Citation Envoyé par Guulh Voir le message
    C'est possible, cher BlueDeep
    En effet ....

    Je pensais que la surcharge du cast devait être faite dans la classe "émettrice"; je me trompais donc.

  6. #6
    Membre éclairé
    Inscrit en
    Octobre 2004
    Messages
    359
    Détails du profil
    Informations forums :
    Inscription : Octobre 2004
    Messages : 359
    Par défaut
    J'ai envi de faire des opérations sur ma Monnaie, par exemple une multiplication :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
            public static Monnaie operator *(Monnaie a, Monnaie b)
            {
                return new Monnaie(a.valeur * b.valeur);
            }
            public static Monnaie operator *(int a, Monnaie b)
            {
                return new Monnaie(a * b.valeur);
            }
    Dans un cas :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    Monnaie m1 = new Monnaie(6);
    Monnaie ms = 2 * m2;
    j'obtiens un résultat (12 € par exemple)

    Dans un autre cas :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Monnaie m1 = new Monnaie(6);
    Monnaie ms = m2 * 2;
    erreur à la compilation :
    L'opérateur '*' ne peut pas être appliqué aux opérandes de type Monnaie et int

    Je ne vais quand même pas définir toute les combinaisons pour une multiplication ?!

    Monnaie * int
    int * Monnaie
    Monnaie * double
    double * Monnaie
    etc...

    Comment faire simplement ?

    Merci (encore)

  7. #7
    Inactif  
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Janvier 2007
    Messages
    6 604
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet NTIC

    Informations forums :
    Inscription : Janvier 2007
    Messages : 6 604
    Par défaut
    Citation Envoyé par Ticoche Voir le message
    J
    Comment faire simplement ?

    Merci (encore)
    Ben, cast justement. C'est pour cela que tu as surchargé le cast, non ?


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Monnaie ms = (Monnaie)(((int)m2) * 2);

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

Discussions similaires

  1. redéfinition de operator/=
    Par troussepoil dans le forum C++
    Réponses: 14
    Dernier message: 19/03/2007, 22h34
  2. CAST ou autre ?
    Par 74160 dans le forum Requêtes
    Réponses: 2
    Dernier message: 10/07/2003, 15h00
  3. CAST DATETIME ----> SMALLDATETIME
    Par Guizz dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 26/06/2003, 12h07
  4. traduction en delphi "reinterpreted cast"
    Par Chupakabra dans le forum Langage
    Réponses: 3
    Dernier message: 13/02/2003, 15h49

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