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 :

Faire un test sur l'appartenance à une classe dérivée


Sujet :

C#

  1. #1
    Membre du Club
    Inscrit en
    Janvier 2006
    Messages
    48
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 48
    Points : 53
    Points
    53
    Par défaut Faire un test sur l'appartenance à une classe dérivée
    Bonjour, j'ai dans mon code une classe A, et une classe B qui en est dérivée :


    class B : A { ... }


    Dans mon code, j'utilise des objets de classe A, et je voudrais mener un test pour savoir s'ils sont de classe B.

    genre j'ai un objet f de classe A

    et je voudrais faire

    si f est de la classe dérivée B, faire ci,
    sinon faire ca.


    Comment m'y prendre ?

    Merci d'avance

  2. #2
    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
    Points : 5 194
    Points
    5 194
    Par défaut
    salut

    pourquoi pas un

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    if(toto is A)
    {
       ( (A)toto).MethodSpecialDeA();
    }
    The Monz, Toulouse

  3. #3
    Membre éclairé Avatar de ppphil
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    612
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Juin 2007
    Messages : 612
    Points : 685
    Points
    685
    Par défaut
    Attention avec le is sur une classe dérivée... J'ai fait le test suivant :
    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
    28
    29
    30
    31
    32
     
      class Class1
      {
      }
     
      class Class2 : Class1
      {
      }
     
    private void button10_Click(object sender, EventArgs e)
        {
          Class1 c1;
          Class2 c2;
     
          c1 = new Class1();
          c2 = new Class2();
          CheckClass(c1);
          CheckClass(c2);
        }
     
        private void CheckClass(object o)
        {
          if (o is Class1)
          {
            MessageBox.Show("Class1");
          }
          if (o is Class2)
          {
            MessageBox.Show("Class2");
          }
        }
      }
    Pour un objet de la classe dérivée Class2 le is va être d'accord avec Class1 et Class2 !!!

  4. #4
    Membre éclairé
    Inscrit en
    Octobre 2006
    Messages
    587
    Détails du profil
    Informations personnelles :
    Âge : 37

    Informations forums :
    Inscription : Octobre 2006
    Messages : 587
    Points : 706
    Points
    706
    Par défaut
    A la place de object je mettrais plutôt Class1 parce qu'avec ta méthode tu peux y passer un objet de n'importe quel type...

  5. #5
    Membre éclairé Avatar de ppphil
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    612
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Juin 2007
    Messages : 612
    Points : 685
    Points
    685
    Par défaut
    T'as parfaitement raison... C'était dans un souci de généricité de CheckClass.

  6. #6
    Membre régulier
    Profil pro
    Développeur informatique
    Inscrit en
    Août 2006
    Messages
    163
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2006
    Messages : 163
    Points : 112
    Points
    112
    Par défaut
    monObj.GetType().IsAssignableFrom(typeof(type2));
    ou alors je comprends pas le problème

  7. #7
    Membre régulier
    Homme Profil pro
    Directeur technique
    Inscrit en
    Novembre 2004
    Messages
    56
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Directeur technique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2004
    Messages : 56
    Points : 105
    Points
    105
    Par défaut
    Pour obtenir des comportements différents dans des classes dérivée, il peut être judicieux d'employer des méthodes virtuelles.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    class A
    {
       public virtual string func(){
           return "A";
       }
    }
     
    class B : A
    {
       public override string func(){
          return "B";
       }
    }

Discussions similaires

  1. Réponses: 4
    Dernier message: 20/06/2011, 02h01
  2. faire des teste sur une cellule editable
    Par minanoun dans le forum Composants
    Réponses: 0
    Dernier message: 07/06/2009, 11h27
  3. Faire un test sur une adresse IP
    Par 01211983 dans le forum Entrée/Sortie
    Réponses: 7
    Dernier message: 24/07/2007, 14h11
  4. faire un test sur une variable
    Par donny dans le forum Langage
    Réponses: 3
    Dernier message: 04/12/2006, 15h55
  5. Afficher un bouton appartenant à une classe sur une form
    Par Julien_riquelme dans le forum Composants VCL
    Réponses: 2
    Dernier message: 05/09/2005, 13h10

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