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 :

c# quelques equivalents c++


Sujet :

C#

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2007
    Messages
    634
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2007
    Messages : 634
    Par défaut c# quelques equivalents c++
    Bonjour,

    Étant débutant en c#, j'ai quelque problème de portage de code c++ vers ce langage.

    - Déjà lors de la compilation d'une classe, je ne vois pas pouquoi j'ai ces warning :
    Warning :
    ---> 'GDateTime' defines operator == or operator != but does not override Object.Equals(object o)
    ---> 'GDateTime' defines operator == or operator != but does not override Object.GetHashCode()
    En effet, je ne surcharge pas cela mais quel rapport avec la surcharge de == ou de != ? Il me demande cela car totue classe hérite de Object d'après ce que j'ai compris ?

    - en c++, j'avais l'habitude d'utiliser les pointeurs sur méthodes
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    typedef void	(Treatment::*method)(const GString &Elem); 
    map<GString, method>	_map;
    puis 
    {
    	this->_map["test"]          =	&Treatment::test;
     
    				if (this->_map.ExistKey(list[0]))
    					(this->*_map[list[0]])(current);
    }
    Comment puis-je faire qulque chose d'équivalent ?

    - Quelle fonction utiliser pour avoir un équivalent de ce code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
            public static void      HideIcons()
            {
     	        HWND hProgMan = FindWindow (NULL, "Program Manager") ;
            	if (hProgMan)
    		      ShowWindow (hProgMan, SW_HIDE);
            }


    Je vous remercie d'avance,
    Cordialement,
    NeoKript

  2. #2
    Membre expérimenté
    Profil pro
    Mangeur de gauffre
    Inscrit en
    Octobre 2007
    Messages
    4 413
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Mangeur de gauffre

    Informations forums :
    Inscription : Octobre 2007
    Messages : 4 413
    Par défaut
    En C# les pointeurs sur methode sont des delegates

    La comparaison d'objet se fait de avec la methode Equals
    l'operateur == compare les references plutot que le contenu

  3. #3
    Membre éclairé
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2007
    Messages
    634
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2007
    Messages : 634
    Par défaut
    Merci pour vos réponses.

    La comparaison d'objet se fait de avec la methode Equals
    l'operateur == compare les references plutot que le contenu
    Pourrais-tu développer cela, je n'ai pas tout compris.


    De plus, j'ai une petite question, j'ai fait un Dictionnary de GString et de delegate comme ceci : (GMap hérite de Dictionary, j'ai juste implémente quelques méthode en plus.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    delegate void   Method(GString message);
    GMap<GString, Method>    _map;
    et je l'utilise comme ce ci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    this._map["cd"]          =	new Method(cd);
    this._map["pwd"]         =  new Method(pwd);
    .....
    if (this._map.ContainsKey(list[0]))
             this._map[list[0]](current);
    J'ai regarde en debug et ContainsKey renvoie toujours false, je ne comprend pas pourquoi je pense que j'ai oublie quelque chose dans ma classe GString mais quoi ?


    Je vous remercie d'avance.
    Cordialement,
    Tincani Geoffrey

  4. #4
    Membre expérimenté
    Profil pro
    Mangeur de gauffre
    Inscrit en
    Octobre 2007
    Messages
    4 413
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Mangeur de gauffre

    Informations forums :
    Inscription : Octobre 2007
    Messages : 4 413
    Par défaut
    Pourrais-tu développer cela, je n'ai pas tout compris.

    Curieusement je ne parvies plus (en 2008 3.5) a reproduire un exemple fonctionnel

    Mais en gros ca signifie ceci

    string a="aaa";
    string b="aaa";

    a et b on le meme contenu !!
    mais a et b des reference distincte sur deux chaines identiques

    En utilisant
    a.Equals(b)

    c'est toujours le contenu que tu compare !!

    Dans certaines situations a==b va comparer les references

    DONC il se peut que tu n'obtienne pas le meme resultat !!

    Maintenant si tu surcharge l'operateur OU la methode tu est libre de comparer ce que tu veux ;-))

    Pour ton GString peux tu donner plus de précision sur tes classe et ce que tu fais

  5. #5
    Membre éclairé
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2007
    Messages
    634
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2007
    Messages : 634
    Par défaut
    Mais en gros ca signifie ceci

    string a="aaa";
    string b="aaa";

    a et b on le même contenu !!
    mais a et b des référence distincte sur deux chaines identiques

    En utilisant
    a.Equals(b)

    c'est toujours le contenu que tu compare !!
    Merci pour l'explication c'est beaucoup mieux.

    Pour les GString ba c'est une classe de gestion des chaines de caractère contenant un String avec des méthodes que j'ai rajouter.

    Cependant, lorsque j'ajoute dans mon GMAp (Dictionary)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    this._map["pwd"] = new Methode(this.pwd);
    si j'ai un GString g = "pwd", le ContainKey de Dictionary ne me trouve pas la cle "pwd" alors que en debug la map est bien rempli et il y a bien les GString "pwd" avec pour length 3 ... Il me retourne toujours false mais je ne comprend vriament pas pourquoi, == et Equals sont surchargées.

    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
     
            public override Boolean Equals(object obj)
            {
                if (obj == null || this.GetType() != obj.GetType()) return false;
                GString t = (GString)obj;
                if (this._str == t._str)
                    return (true);
                return (false);
            }
            public static Boolean operator== (GString t1, GString t2)
            {
                if (t1._str == t2._str)
                    return (true);
                return (false);
            }
    Par contre je compare le contenu dans les deux cas moi ...

    Merci d'avance

  6. #6
    Expert confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2005
    Messages
    5 503
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Conseil

    Informations forums :
    Inscription : Février 2005
    Messages : 5 503
    Par défaut
    Là, vous comparez des références sur des objets.
    Seul le type "string" a la particularité de n'avoir qu'une référence par objet si le contenu des chaînes est le même (le runtime .NET ne gérera qu’un objet, expliquant pourquoi string est immutable).
    C'est un peu comme si en C++
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    char* toto = "toto";
    char* titi = "toto";
    titi == toto simplement dû au contenu, mais uniquement pour le type string.
    Par exemple, cela sera faut pour un Array<char>.
    "_str" est bien une string ?

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

Discussions similaires

  1. Equivalents Delphi de quelques variables VB
    Par AL1986 dans le forum Langage
    Réponses: 6
    Dernier message: 19/08/2007, 12h26
  2. [Kylix] Equivalent ShellExec en CLX
    Par Anonymous dans le forum EDI
    Réponses: 7
    Dernier message: 14/08/2002, 11h55
  3. [Kylix] equivalent winsock avec kylix
    Par Victor dans le forum EDI
    Réponses: 2
    Dernier message: 08/05/2002, 07h43

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