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 :

Connaitre le type d'un objet quand celui-ci est null


Sujet :

C#

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Novembre 2010
    Messages
    188
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Conseil

    Informations forums :
    Inscription : Novembre 2010
    Messages : 188
    Par défaut Connaitre le type d'un objet quand celui-ci est null
    Bonjour,
    La méthode GetType() permettant de connaître le type d'un objet ne peut se faire que sur une instance de l'objet mais quand l'objet est null ça ne fonctionne pas... Comment puis-je faire ?

    Merci

  2. #2
    Membre très actif
    Homme Profil pro
    Développeur
    Inscrit en
    Octobre 2014
    Messages
    322
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Saône et Loire (Bourgogne)

    Informations professionnelles :
    Activité : Développeur
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2014
    Messages : 322
    Par défaut
    Bonjour,

    la valeur null indique qu'il n'y a aucun contenu dans la variable.
    Donc il y a aucun type.

  3. #3
    Membre confirmé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Novembre 2010
    Messages
    188
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Conseil

    Informations forums :
    Inscription : Novembre 2010
    Messages : 188
    Par défaut
    Merci Math71 pour ta réponse mais il doit bien y avoir un type car si je code ceci
    Code C# : Sélectionner tout - Visualiser dans une fenêtre à part
    MonType monType = null;
    monType est bien typé, du coup je me demandait s'il était possible de le récupérer...

  4. #4
    Expert éminent Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 202
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 202
    Par défaut
    c'est la variable qui est typée, et vu que tu as écris le type alors il n'y a pas besoin de chercher à le récupérer
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  5. #5
    Membre confirmé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Novembre 2010
    Messages
    188
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Conseil

    Informations forums :
    Inscription : Novembre 2010
    Messages : 188
    Par défaut
    Merci Pol63,
    Ecrit comme je l'ai fait oui c'est sûr que je n'ai pas de question à me poser mais c'était une simplification de code, voici un code plus proche de ma situation :
    Code C# : 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
    interface IMonInterface
    {
        public MaPropriete { get; set; }
    }
     
    class MonObjet : IMonInterface
    {
        public MaPropriete { get; set; }
        public MaProprieteSpecific { get; set; }
    }
     
    class MonAutreObjet : IMonInterface
    {
        public MaPropriete { get; set; }
        public MonAutreProprieteSpecific { get; set; }
    }
     
    void Main()
    {
        MonObjet monObjet = null;
        MaFonction(monObjet);
    }
     
    void MaFonction(IMonInterface unObjet)
    {
        // Et là, comment faire pour savoir si c'est MonObjet ou MonAutreObjet ?
    }

    Merci d'avance

  6. #6
    Expert confirmé

    Avatar de François DORIN
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Juillet 2016
    Messages
    2 761
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2016
    Messages : 2 761
    Billets dans le blog
    21
    Par défaut
    Il faut bien comprendre qu'il y a 2 types :
    - le type de la variable, associé à la variable que l'on manipule : il est fixe et est déterminé à la compilation
    - le type de l'instance, associé à l'instance d'objet manipulé : il est dynamique et dépend de l'instance. Le type de l'instance est obligatoirement un type compatible avec le type de la variable. Soit identique, soit une classe enfant (dans le cas de l'héritage), soit une implémentation (dans le cas où le type de la variable est une interface).

    La méthode GetType() permet de récupérer le type d'instance. Ce qui n'est disponible qu'à la condition d'avoir une instance. Donc quand on a un null, on n'a pas d'instance, il n'y a pas de type. L'instruction typeof permet de déterminer le type de la variable et retourne toujours une valeur, car il est évalué à la compilation.

    Maintenant, dans ton cas, avoir une méthode comme ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    void MaFonction(IMonInterface unObjet)
    {
        // Et là, comment faire pour savoir si c'est MonObjet ou MonAutreObjet ?
    }
    reflète généralement un défaut de conception. Un des intérêts de l'héritage et du polymorphisme, c'est de pouvoir s'abstraire du type réel d'un objet. Si tu as vraiment besoin de revenir au type de l'instance, il est impératif d'avoir une instance. Avec un null, tu ne pourras rien faire.

    Eventuellement tu peux utiliser des surcharges différentes, mais la surcharge utilisera le type de la variable, pas le type de l'instance.

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

Discussions similaires

  1. Connaitre le type d'un objet "Java Model"
    Par legentil dans le forum Eclipse Platform
    Réponses: 0
    Dernier message: 10/02/2014, 14h08
  2. [VBA-EXCEL] Connaitre le type d'un objet
    Par binouzzz19 dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 05/03/2009, 16h33
  3. Réponses: 3
    Dernier message: 13/05/2008, 13h39
  4. Connaitre le type d'un objet
    Par Gregory.M dans le forum Windows Forms
    Réponses: 5
    Dernier message: 07/03/2008, 16h01
  5. Connaitre le type d'un objet
    Par slydemusli dans le forum Access
    Réponses: 5
    Dernier message: 18/08/2006, 11h31

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