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 :

Surcharge opérateur classique


Sujet :

C#

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Webmaster
    Inscrit en
    Juin 2007
    Messages
    126
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Webmaster

    Informations forums :
    Inscription : Juin 2007
    Messages : 126
    Par défaut Surcharge opérateur classique
    Bonjour,

    je voudrais si c'est possible de surcharger des opérateurs classiques (+,-,==,...) pour des classes qui existent déjà?

    Dans la plupart des tutoriaux, on ne parle des surcharges que pour des classes que l'on crée, or moi je voudrais par exemple créer la fonction "+" pour le type "object". Si c'est possible, où mettre la nouvelle définition.

    J'ai mis le code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    public static object operator+ (object O1,object O2)
    dans la classe où j'ai besoin, mais j'ai l'erreur suivante:
    Un des paramètres d'un operateur binaire doit être le type conteneur.
    Merci pour votre aide.

  2. #2
    Membre expérimenté
    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 : 47
    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
    Par défaut
    Ce n'est pas possible et cela n'aurait pas de sens de toute façon.

  3. #3
    Membre habitué
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 14
    Par défaut
    Bonjour,

    J'ai la même erreur en écrivant ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    public static DelegateMouse operator +(DelegateMouse a, DelegateMouse b)
    {
    ...
    }
    Vous aurez compris qu'il s'agit de délégués et que j'aimerais surcharger l'opérateur +
    Pourquoi ? Parce que je ne veux pas ajouter une fonction dans le délégué si elle y est déjà !

    Si on a ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    eventMouseDown += mouseDown;
    eventMouseDown += mouseDown;
    Je ne veux pas que le second fonctionne, il doit rester sans effet. J'ai la fonction qui cherche mais c'est une simple fonction, il faudrait que je remplace tous mes += sur mes délégués
    Alors qu'avec une surcharge, je serais tranquille.

    La doc MSDN indique ceci pour cette erreur de compilation :
    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
    public class iii
    {
        public static implicit operator int(iii x)
        {
            return 0;
        }
        public static implicit operator iii(int x)
        {
            return null;
        }
        public static int operator +(int aa, int bb)   // CS0563 
        // Use the following line instead:
        // public static int operator +(int aa, iii bb)    
        {
            return 0;
        }
        public static void Main()
        {
        }
    }
    Mais ça reste peu compréhensible pour moi ... qu'est ce que c'est que ce type "iii" ? Je vois bien que c'est la classe dans laquelle on se trouve mais bon ... je ne comprends pas, alors que le C++ accepte parfaitement ce genre d'opérateur

    Quelqu'un a une idée pour faire fonctionner ma surcharge ?
    Serait-ce impossible du fait que ce sont des délégués ?

  4. #4
    Expert confirmé

    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Septembre 2006
    Messages
    3 580
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Septembre 2006
    Messages : 3 580
    Par défaut
    salut

    si tu veux faire cela pour un delegate (enfin, un evenement) regardes du coté de add/remove.. tu verras, pas besoin de surcharge pour arriver à n'avoir qu'un seul delegate d'enregistrer à ton evenement

  5. #5
    Membre habitué
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 14
    Par défaut
    Mes délégués ne m'offrent pas ces méthodes, ils semblent en lecture seule
    Je peux récupérer la liste des fonctions enregistrée avec getInvocationList() mais aucune méthode d'ajout ou de suppression là dedans !
    Cette liste d'invocation peut me fournir un énumérateur mais toujours aucune opération de modification disponible

  6. #6
    Membre chevronné Avatar de MetalGeek
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    412
    Détails du profil
    Informations personnelles :
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Octobre 2008
    Messages : 412
    Par défaut
    Salut,
    tu peux déclarer des corps "add" et "remove" pour tes évènements ; de toute façon "surcharger" les opérateurs des types clr que tu n'as pas créés, si cela était possible, serait à bannir.

Discussions similaires

  1. Portabilitée : Surcharge opérateur de comparaison
    Par Dimitri_87 dans le forum C++
    Réponses: 11
    Dernier message: 15/12/2006, 16h14
  2. Surcharge opérateur +
    Par nunurs83 dans le forum C++
    Réponses: 6
    Dernier message: 31/10/2006, 09h48
  3. [Débutant]Surcharge opérateur +
    Par Geolem dans le forum Débuter
    Réponses: 13
    Dernier message: 05/12/2005, 10h16
  4. surcharge opérateur << et >>
    Par Azharis dans le forum Débuter
    Réponses: 11
    Dernier message: 02/11/2005, 21h22
  5. Surcharge opérateurs
    Par ghostdogpr dans le forum C++
    Réponses: 5
    Dernier message: 18/03/2005, 11h51

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