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 :

Supprimer le namespace avec le GetType ou le ToString


Sujet :

C#

  1. #1
    Membre du Club
    Homme Profil pro
    Enseignant
    Inscrit en
    Mars 2014
    Messages
    82
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 25
    Localisation : France, Haute Loire (Auvergne)

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Mars 2014
    Messages : 82
    Points : 56
    Points
    56
    Par défaut Supprimer le namespace avec le GetType ou le ToString
    Bonjour,

    Je voulais savoir si quand je fait un GetType ou un ToString de l'une de mes classe je peut supprimer le namespace devant exemple :
    J'ai 3 classe :
    - Program (le main quoi)
    - Mother
    - Child

    et du coup dans mon main je fait
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    Child c = new Chiled();
    Console.WriteLine(c.GetType());
    et ça me sort Test_CSharp_pure.Child je souhaite donc enlever le Test_CSharp_pure qui est le namespace

    Merci de votre aide

  2. #2
    Membre éprouvé Avatar de WDKyle
    Homme Profil pro
    Analyste-Programmeur
    Inscrit en
    Septembre 2008
    Messages
    1 200
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Analyste-Programmeur

    Informations forums :
    Inscription : Septembre 2008
    Messages : 1 200
    Points : 962
    Points
    962
    Par défaut
    Je suis peut-être à coté de la plaque mais un nameof(Child) ne correspondrait pas à ton attente ?

  3. #3
    Membre du Club
    Homme Profil pro
    Enseignant
    Inscrit en
    Mars 2014
    Messages
    82
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 25
    Localisation : France, Haute Loire (Auvergne)

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Mars 2014
    Messages : 82
    Points : 56
    Points
    56
    Par défaut
    Sa me met bien bien Child ducoup mais genre il y a pas une méthode pour que avec c j'obtienne Child pas grave si ça existe pas je me débrouille avec ça limite merci

  4. #4
    Membre chevronné
    Homme Profil pro
    edi
    Inscrit en
    Juin 2007
    Messages
    905
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : edi

    Informations forums :
    Inscription : Juin 2007
    Messages : 905
    Points : 1 923
    Points
    1 923
    Par défaut
    Sur l'objet Type tu as les propriétés Name (uniquement le nom du type, équivalent de nameof du type) et FullName (nom complet avec la hiérarchie de namespace) ; la méthode ToString() renvoie le FullName mais de ton côté tu peux utiliser le Name seul.

  5. #5
    Expert confirmé

    Homme Profil pro
    Responsable déploiement (SCCM, InTune, GPO)
    Inscrit en
    Juillet 2014
    Messages
    3 196
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Responsable déploiement (SCCM, InTune, GPO)
    Secteur : Transports

    Informations forums :
    Inscription : Juillet 2014
    Messages : 3 196
    Points : 5 785
    Points
    5 785
    Par défaut
    Une petite méthode d'extension.

    Code c# : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
        public static class extension
        {
            public static string Name(this object obj)
            {
                return obj.GetType().Name;
            }
        }

  6. #6
    Expert confirmé
    Avatar de popo
    Homme Profil pro
    Analyste programmeur Delphi / C#
    Inscrit en
    Mars 2005
    Messages
    2 730
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Analyste programmeur Delphi / C#
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 2 730
    Points : 5 391
    Points
    5 391
    Par défaut
    Pourquoi créer une méthode d'extension quand il suffit de surcharger ToString (comme l'a précisé Noxen) ?

  7. #7
    Membre expert
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Octobre 2013
    Messages
    1 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

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

    Informations forums :
    Inscription : Octobre 2013
    Messages : 1 563
    Points : 3 404
    Points
    3 404
    Par défaut
    Citation Envoyé par popo Voir le message
    Pourquoi créer une méthode d'extension quand il suffit de surcharger ToString (comme l'a précisé Noxen) ?
    Entre créer une méthode d'extension et surcharger le ToString pour chaque classes, autant créer la méthode d'extension.. Tu fais le boulot une seule fois !

  8. #8
    Expert confirmé

    Homme Profil pro
    Responsable déploiement (SCCM, InTune, GPO)
    Inscrit en
    Juillet 2014
    Messages
    3 196
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Responsable déploiement (SCCM, InTune, GPO)
    Secteur : Transports

    Informations forums :
    Inscription : Juillet 2014
    Messages : 3 196
    Points : 5 785
    Points
    5 785
    Par défaut
    Je veux bien voir l'exemple de Noxen, même si j'évite de modifier le comportement des méthodes de base.

  9. #9
    Expert éminent sénior

    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 : 40
    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
    Points : 10 543
    Points
    10 543
    Billets dans le blog
    21
    Par défaut
    Citation Envoyé par popo Voir le message
    Pourquoi créer une méthode d'extension quand il suffit de surcharger ToString (comme l'a précisé Noxen) ?
    Plus qu'une surchage, c'est le polymorphisme qui est souhaité. Et cela nécessite d'avoir le contrôle sur la classe pour pouvoir faire cela. Sans compter que la méthode ToString() est peut-être déjà redéfinie pour afficher quelques choses de plus user friendly.

    Bref, la meilleure méthode ici, à mon avis, reste la méthode d'extension sur la classe Object, comme le propose ericlm128. On écrit la méthode une fois, et c'est disponible pour toutes les classes !

  10. #10
    Membre chevronné
    Homme Profil pro
    edi
    Inscrit en
    Juin 2007
    Messages
    905
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : edi

    Informations forums :
    Inscription : Juin 2007
    Messages : 905
    Points : 1 923
    Points
    1 923
    Par défaut
    Citation Envoyé par popo Voir le message
    Pourquoi créer une méthode d'extension quand il suffit de surcharger ToString (comme l'a précisé Noxen) ?
    Je pense que la façon dont j'ai formulée ma phrase prête à confusion : ce que je lui conseillais c'est d'utiliser la propriété Name du type au lieu d'utiliser la méthode ToSting() (de façon explicite ou implicite).

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Child c = new Child();
    Console.WriteLine(c.GetType().Name);
    La méthode d'extension d'ericlm128 est une approche tout à fait valide pour simplifier le code (bien que j'y rajouterais une vérification sur la nullité d'objet).

  11. #11
    Expert éminent sénior

    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 : 40
    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
    Points : 10 543
    Points
    10 543
    Billets dans le blog
    21
    Par défaut
    Citation Envoyé par Noxen Voir le message
    La méthode d'extension d'ericlm128 est une approche tout à fait valide pour simplifier le code (bien que j'y rajouterais une vérification sur la nullité d'objet).
    Pas forcément. Cela dépend du comportement souhaité. Si on souhaite que cela soit le plus transparent possible et que cela ressemble au maximum à une fonction membre et génère un NullPointerException, il faut laisser le code ainsi.

    C'est une des subtilités des méthodes d'extensions :
    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
     
    class Classe1
    {
       public int Truc()
       {
          return 5;
       }
    }
     
    static class Classe2
    {
       public static int Truc2(this Truc o)
       {
          return 5;
       }
    }
     
    int Main(string[] args)
    {
       Classe1 o = null;
       o.Truc(); // NullPointerException
       o.Truc2(); // Pas d'erreur
    }
    Les deux méthodes font exactement la même chose, et n'ont pas besoin d'objet. Pourtant, la première génère une exception, et la seconde non. Cela ce produit ainsi car :
    • une méthode à besoin d'un objet support. C'est un impératif. Sans cela, NullPointerException ;
    • une méthode d'extension est seulement un sucre syntaxique, qui permet de faire croire qu'on ajoute une méthode à une classe. Mais en réalité, cela reste simplement un appel de fonction.

  12. #12
    Membre chevronné
    Homme Profil pro
    edi
    Inscrit en
    Juin 2007
    Messages
    905
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : edi

    Informations forums :
    Inscription : Juin 2007
    Messages : 905
    Points : 1 923
    Points
    1 923
    Par défaut
    Dans la méthode d'extension elle-même ce code return obj.GetType().Name; va lever une NullReferenceException, c'est ce à quoi je faisais allusion.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    public static class Extensions
    {
      public static string TypeName(this object obj)
      {
        return obj?.GetType().Name;
      }
    }

  13. #13
    Expert éminent sénior

    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 : 40
    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
    Points : 10 543
    Points
    10 543
    Billets dans le blog
    21
    Par défaut
    J'avais bien compris Pour ma part, je laisserai l'exception être générée, pour la raison invoquée dans mon précédent commentaire.

  14. #14
    Membre chevronné
    Homme Profil pro
    edi
    Inscrit en
    Juin 2007
    Messages
    905
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : edi

    Informations forums :
    Inscription : Juin 2007
    Messages : 905
    Points : 1 923
    Points
    1 923
    Par défaut
    Citation Envoyé par François DORIN Voir le message
    J'avais bien compris Pour ma part, je laisserai l'exception être générée, pour la raison invoquée dans mon précédent commentaire.
    Pour le coup c'est moi qui ne t'avais pas compris. Effectivement ça dépend du comportement que l'on en attend, selon qu'on veut traiter cette méthode d'extension comme une méthode membre ou comme un simple "helper" ; mais là c'est plus une question de conception.

Discussions similaires

  1. supprimer un namespace créé avec CreateExtNS2
    Par rufa11 dans le forum Debian
    Réponses: 1
    Dernier message: 19/03/2013, 01h47
  2. [DOM] Supprimer des balise avec dom
    Par Shandler dans le forum Bibliothèques et frameworks
    Réponses: 3
    Dernier message: 04/06/2006, 19h03
  3. Supprimer des caractères avec une requête
    Par Daniel MOREAU dans le forum Access
    Réponses: 3
    Dernier message: 23/05/2006, 23h28
  4. Supprimer fichier uploader avec aspSmartUpload
    Par julio_097 dans le forum ASP
    Réponses: 2
    Dernier message: 11/08/2005, 16h27
  5. supprimer une ligne avec cle etrangere
    Par BaBas dans le forum Langage SQL
    Réponses: 4
    Dernier message: 15/07/2003, 11h24

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