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 :

L’opérateur typeid de C++ : existe-t-il en c#?


Sujet :

C#

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    118
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 118
    Points : 68
    Points
    68
    Par défaut L’opérateur typeid de C++ : existe-t-il en c#?
    Bonjour,

    Comme vous savez : l’opérateur typeid permet de connaître le type d’un
    objet lors de exécution.

    Je voudrais savoir si l'opérateur typeid (de C++) existe en c#?
    si non comment utiliser un autre qui fait le même travail ?
    (Par exemple : sachant que la classe "Cube" hérite de la Classe "ObjetGeo" ,
    ce code ( qui est en c++ )
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    ObjetGeo *Tableau[N];
    int nbCube=0;
    for(i=0; i<N; i++)
    if ( typeid( Tableau[i] ) == typeid( Cube))
    nbCube++;
    comment l'écrire en c# ? )


    Merci d'avance

  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
    Regarde typeof mais aussi le mot clé is qui est plus simple pour ce que tu veux
    Pas de questions techniques par MP

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    118
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 118
    Points : 68
    Points
    68
    Par défaut
    Citation Envoyé par StormimOn Voir le message
    Regarde typeof mais aussi le mot clé is qui est plus simple pour ce que tu veux
    Merci bien StormimOn ,

    Oui , le "typeof" fait l'affaire , mais je sais pas pourquoi ça marche pas dans une boucle Switch !

    J'explique :
    ce code marche bien :


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
     
             if (mavariable.GetType() == typeof(uneClasse))
                    {
                        ...
     
                    }
    mais celui là ne marche pas :


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
     
                    switch (mavariable.GetType())
                    {
                     case typeof(uneClasse) : {
                         ...
     
                     }break;
     
     
                    }
    Pourtant c'est le même traitement !
    (l'erreur est :
    1-A value of an integral type expected
    2-A constant value is expected )

  4. #4
    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
    Le switch ne peut être utilisé qu'avec des valeurs intégrales (valeurs numériques, chaînes de caractères, énumération). Tu dois passer par un if pour faire ce que tu veux.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    if (maVariable is UneClasse)
    {
    }
    else if (maVariable is UneAutreClasse)
    {
    }
    ...
    Pas de questions techniques par MP

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    118
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 118
    Points : 68
    Points
    68
    Par défaut
    Citation Envoyé par StormimOn Voir le message
    Le switch ne peut être utilisé qu'avec des valeurs intégrales (valeurs numériques, chaînes de caractères, énumération). Tu dois passer par un if pour faire ce que tu veux.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    if (maVariable is UneClasse)
    {
    }
    else if (maVariable is UneAutreClasse)
    {
    }
    ...
    Oui bien sure, je vais travailler avec le if ... else if ... mais c'est assez lourd !
    Merci en tout cas

  6. #6
    Membre expert
    Avatar de Pragmateek
    Homme Profil pro
    Formateur expert .Net/C#
    Inscrit en
    Mars 2006
    Messages
    2 635
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Formateur expert .Net/C#
    Secteur : Conseil

    Informations forums :
    Inscription : Mars 2006
    Messages : 2 635
    Points : 3 958
    Points
    3 958
    Par défaut
    Tu peux aussi utiliser :
    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
    25
    26
    27
    using System;
     
    class A
    {
    }
     
    class B
    {
    }
     
    class Test
    {
    	static void Main()
    	{
    		Object o = new A();
     
    		switch (o.GetType().ToString())
    		{
    			case "A":
    				Console.WriteLine("A");
    				break;
    			case "B":
    				Console.WriteLine("B");
    				break;
    		}
    	}
    }
    Cependant cette méthode est moins maintenable que l'autre, si les types changent de namespace par exemple.
    Formateur expert .Net/C#/WPF/EF Certifié MCP disponible sur Paris, province et pays limitrophes (enseignement en français uniquement).
    Mon blog : pragmateek.com

  7. #7
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    118
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 118
    Points : 68
    Points
    68
    Par défaut
    Citation Envoyé par seriousme Voir le message
    Tu peux aussi utiliser :
    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
    25
    26
    27
    using System;
     
    class A
    {
    }
     
    class B
    {
    }
     
    class Test
    {
    	static void Main()
    	{
    		Object o = new A();
     
    		switch (o.GetType().ToString())
    		{
    			case "A":
    				Console.WriteLine("A");
    				break;
    			case "B":
    				Console.WriteLine("B");
    				break;
    		}
    	}
    }
    Cependant cette méthode est moins maintenable que l'autre, si les types changent de namespace par exemple.

    Oui .. Merci
    je préfère la solution précédente

  8. #8
    Membre émérite Avatar de Guulh
    Homme Profil pro
    Inscrit en
    Septembre 2007
    Messages
    2 160
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Septembre 2007
    Messages : 2 160
    Points : 2 925
    Points
    2 925
    Par défaut
    Et puis les méthodes virtuelles sont précisément faites pour éviter de devoir faire des switch sur le type réel d'un objet, que ce soit en c++ ou C#
    ಠ_ಠ

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

Discussions similaires

  1. [ADO] Tester l'existence d'une table
    Par nd25 dans le forum VB 6 et antérieur
    Réponses: 11
    Dernier message: 05/09/2002, 13h55
  2. Check Url pour savoir si erreur 404 ou si le site existe
    Par Clément[Delphi] dans le forum Composants VCL
    Réponses: 2
    Dernier message: 07/08/2002, 13h49
  3. Existe-t'il un type tenant sur 2 octets ?
    Par benj63 dans le forum C++Builder
    Réponses: 13
    Dernier message: 20/06/2002, 17h03
  4. Existe t'il un composant permettant de jouer un son wav?
    Par scorpiwolf dans le forum C++Builder
    Réponses: 5
    Dernier message: 20/06/2002, 14h10
  5. Existe-t-il un langage de prog "virtuel" en Français
    Par HRS dans le forum Langages de programmation
    Réponses: 4
    Dernier message: 10/06/2002, 18h11

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