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 :

Dictionnaire de Classes


Sujet :

C#

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre chevronné Avatar de Jerede
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mai 2010
    Messages
    271
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Mai 2010
    Messages : 271
    Par défaut Dictionnaire de Classes
    Bonjour,

    J'aimerai savoir s'il était possible de stocker dans un dictionnaire, des références vers le Type d'une classe.

    Admettons par exemple que j'ai 3 classes :
    Type1, Type2 et Type3 qui hérite de la classe Type.

    et que je veuille un dictionnaire qui fonctionne comme cela :
    De façon à ce que je puisse faire comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     Type monType =  new dType[1]();
    C'est sûrement possible avec la réflection, mais dans mon programme ce passage sera executé ~100ms en boucle

    Cela est t-il possible ? Y'a t'il une solution plus performante ?

    Merçi d'avance

  2. #2
    Membre chevronné Avatar de Jerede
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mai 2010
    Messages
    271
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Mai 2010
    Messages : 271
    Par défaut
    Bon, je crois que je vais devoir me résoudre à utiliser la réflexion

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
        Dictionary<int, Type> dico = new Dictionary<int, Type>();
        dico.Add(1, typeof(Type1));
        dico.Add(2, typeof(Type2));
        dico.Add(3, typeof(Type3));
     
    dico[1].GetConstructor(new Type[] {}).Invoke(null);

  3. #3
    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
    Par défaut
    salut

    j'aurais tendance à faire celà :

    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
     
     
    Dictionary<int, Type> types = new Dictionary<int, Type>();
     
                types.Add(1, typeof(Form));
                types.Add(2, typeof(Button));
     
                Stopwatch clock = Stopwatch.StartNew();
                List<Object> objects = new List<object>();
                for (int i = 0; i < 100; i++)
                {
                    objects.Add(Activator.CreateInstance(types[1]));
                }
                clock.Stop();
                Trace.WriteLine("Temps pour créer 100 objets = " + clock.ElapsedMilliseconds.ToString());
    Après, en terme de mesure de performance, il faut 1 ms pour créer 100 objets dans mon exemple...

    Cela répond-il à ta question ?

  4. #4
    Membre éprouvé
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Avril 2006
    Messages
    1 627
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2006
    Messages : 1 627
    Par défaut
    Hello,

    tu peux stocker ce que tu veux dans ton dictionnary, mais ton approche me semble étrange (pas sûr que ta manière d'instancier soit juste). Pourquoi ne pas te faire un pattern Factory où ton int sera remplacé par un enum ?

    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
     
    public enum CustomType
    {
      Type1,
      Type2,
      ....
    }
     
    public class MonType1 : Type {}
     
    public class MonType2 : Type {}
     
    public class CustomTypeFactory
    {
       public Type GetInstance(CustomType typeCible)
       {
          switch(typeCible)
          {
              case CustomType.Type1 : return new MonType1();
              case CustomType.Type2 : return new MonType2();
          }
       }
    }

  5. #5
    Membre chevronné Avatar de Jerede
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mai 2010
    Messages
    271
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Mai 2010
    Messages : 271
    Par défaut
    Le Problème c'est qu'il y'a 8xx classes ( différents types de message que le serveur peut envoyer )
    Et le problème de la reflexion c'est comme c'est une boucle qui traite les messages reçus, ça va prendre un coup niveau performance.

    Je vais donc utiliser la reflexion en attendant que je trouve le courage de me tapper les 8xx case dans le switch

  6. #6
    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
    Par défaut
    si tu connais les 8xx noms de classes, tu peux te faire une génération automatique de ton code...

    (c'est quelques lignes de codes à peine à écrire pour générer un fichier)

  7. #7
    Membre chevronné Avatar de Jerede
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mai 2010
    Messages
    271
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Mai 2010
    Messages : 271
    Par défaut
    Mhhh, oui, très bonne idée merçi !

  8. #8
    Membre éprouvé
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Avril 2006
    Messages
    1 627
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2006
    Messages : 1 627
    Par défaut
    Hériter de Type pour échanger des messages entre serveurs et clients ? Quelle drôle d'idée

    +1 pour la génération automatique

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

Discussions similaires

  1. Dictionnaire de dictionnaire - Module de Classe
    Par NicolasC91 dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 17/11/2011, 18h41
  2. copier par valeur un dictionnaire de classe
    Par kineton dans le forum C#
    Réponses: 5
    Dernier message: 15/04/2010, 00h08
  3. Réponses: 5
    Dernier message: 02/08/2009, 22h32
  4. Attribut de classe : dictionnaire toujours vide
    Par MaxouHTR dans le forum Général Python
    Réponses: 8
    Dernier message: 16/09/2008, 12h43
  5. Cherche classe "dictionnaire"
    Par Yokosuma dans le forum Langage
    Réponses: 4
    Dernier message: 04/12/2007, 17h13

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