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 :

Méthode ToString paramétrable


Sujet :

C#

  1. #1
    Membre habitué
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Novembre 2010
    Messages
    185
    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 : 185
    Points : 167
    Points
    167
    Par défaut Méthode ToString paramétrable
    Bonjour,
    On m'a posé une question à laquelle j'ai eu une réponse mais elle ne me satisfait pas niveau performance.
    La question : Puis-je écrire dans un fichier CSV le contenu d'une classe ?
    Réponse : Oui, pas de problème, la surcharge de la méthode ToString peut t'aider, écrit ce que tu veux sortir de ta classe et hop le tour est joué.
    Question subsidiaire : Mais j'aimerai pouvoir paramétrer cette sortie en donnant l'ordre de sortie des propriétés dans un fichier de config ?
    Réponse : Pas de soucis, avec la réflexion c'est possible.
    Question performance : Mais mon système est très sollicité et je n'aimerai pas faire de la réflexion à chaque fois que je sors ma classe car la réflexion n'est pas très performant et en plus, une fois configuré, je ne toucherais plus à l'ordre à moins de redémarrer l'application (en ayant changé le fichier de config).
    Réponse : Heuuuummmm, je vais regarder ce qu'on peut faire... et je me retourne vers vous.

    Est-il possible (ou des idées pour y tendre) de préparer une fonction (même si ce n'est pas ToString) qui est configurée une seule fois au démarrage de l'application avec de la réflexion (cela me parait inévitable) mais qui n'utiliserai plus de réflexion par la suite ?

    Complément : Je voyais la chaine de config un peu comme ça "{Prop1};{SousClasse.Prop2};A{Prop3}", oui avec une sous classe et parfois une lettre fixe répétée à chaque enregistrement.

    Merci pour vos retours

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

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 154
    Points : 25 072
    Points
    25 072
    Par défaut
    même sans faire de méthode sur la ou les classes en question
    tu peux faire une conf type
    [NomClasse]:prop1, prop2.prop7, prop3

    et avec la reflection tu pourras découper tout ça et au moment où tu as une instance retrouver quelles propriétés appeler (sans méthode donc)

    si tu as besoin de perf (genre si des milliers d'appels par minute) tu peux compiler du code à la volée (il y a différentes méthodes)
    (il faut quand même utiliser la reflection pour générer le code, donc le 1er appel sera plus long mais après c'est comme si tu avais codé ce qui est nécessaire)
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  3. #3
    Membre habitué
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Novembre 2010
    Messages
    185
    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 : 185
    Points : 167
    Points
    167
    Par défaut
    Alors ça c'est une bonne idée surtout que j'ai déjà fait de la compilation à chaud mais je n'y ai pas pensé dans ce cadre là. Merci Pol63.

    Entre temps j'ai aussi pensé utiliser les pointeurs mais là je n'en ai jamais fait mais que pensez-vous de l'idée ?

    Je vais voir ça... la semaine prochaine.

    Et si quelqu'un a une autre idée, qu'il n'hésite pas

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

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 154
    Points : 25 072
    Points
    25 072
    Par défaut
    les pointeurs ... c'est à dire ?
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  5. #5
    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
    Pour une solution"simple" sans trop de prise de tête : utiliser un moteur de rendu, comme Razor (il est exploitable en dehors des applications Web) :
    - tu génères un template représentant une ligne depuis ton fichier de configuration
    - tu compiles le template
    - tu appelles le template compilé avec en paramètre l'objet représentant ta ligne.

    Le moteur de template va faire tout le boulot de compilation à la volée à ta place, lors de la compilation du template. Les appels successifs seront ensuite rapide.

    Et si tu souhaites par la suite changer de template sans redémarrer l'application, cela sera facile tout aussi simplement qu'en répétant le processus à partir de l'étape 1.

    Tu peux même te passer de l'étape 1 si dans ton fichier de configuration, tu mets directement le template que tu souhaites utiliser.
    François DORIN
    Consultant informatique : conception, modélisation, développement (C#/.Net et SQL Server)
    Site internet | Profils Viadéo & LinkedIn
    ---------
    Page de cours : fdorin.developpez.com
    ---------
    N'oubliez pas de consulter la FAQ C# ainsi que les cours et tutoriels

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

    Informations professionnelles :
    Activité : edi

    Informations forums :
    Inscription : Juin 2007
    Messages : 900
    Points : 1 918
    Points
    1 918
    Par défaut
    Plutôt que de d'appliquer la configuration sur la classe à exporter en CSV il est possible de l'appliquer sur une classe servant à faire la sérialisation. Est-ce-qu'il s'agit de convertir en CSV une classe en particulier ou veut-on une approche générique ?

  7. #7
    Membre habitué
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Novembre 2010
    Messages
    185
    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 : 185
    Points : 167
    Points
    167
    Par défaut
    Bonjour à tous,
    Merci et désolé de cette réponse tardive, j'ai été affecté sur des sujets plus prioritaires que ce points là.

    Je reviens néanmoins dessus en ce début d'année 2024 dont je vous souhaite le meilleur.

    Après être rentré plus en profondeur sur la demande, j'ai revu le projet car il était plus compliqué pour pas grand chose alors je l'ai refait plus simplement. Donc, j'ai pu remarquer qu'en fait il était préférable d'utiliser le design pattern de l'observateur et dès que la classe était modifiée, l'observateur ajoute une ligne dans le CSV. Comme il n'y a que 2 observateurs et qu'ils sont définis sur une seule propriété de suivi chacun, a priori, je n'ai plus vraiment besoin de cette fonctionnalité pour le moment et surtout je n'ai pas autant de traitement à faire que ce qu'il m'a été annoncé au début, une réflexion passera très bien finalement.

    @Noxen : C'est une bonne idée mais comme c'est sur la même classe, pas moyen d'utiliser la sérialisation.
    @François DORIN : Je ne connais pas Razor et vais peut-être regarder pour ouvrir mes connaissances sur ce sujet mais ce sera plus tard...

Discussions similaires

  1. Méthode toString d'un vector
    Par FranT dans le forum Langage
    Réponses: 6
    Dernier message: 31/10/2006, 17h53
  2. Problème d'affichage avec le méthode toString()
    Par Premium dans le forum Langage
    Réponses: 8
    Dernier message: 26/10/2006, 11h36
  3. Méthode en paramètre.
    Par vincent0 dans le forum C++
    Réponses: 10
    Dernier message: 27/09/2006, 15h08
  4. Affichage sur plusieurs lignes d'une méthode toString
    Par Flophx dans le forum Interfaces Graphiques en Java
    Réponses: 9
    Dernier message: 24/05/2006, 16h30
  5. Réponses: 7
    Dernier message: 06/05/2006, 15h06

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