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 :

Instancier un objet d'une Classe<T> en connaissant le Type


Sujet :

C#

  1. #1
    Membre habitué Avatar de touftouf57
    Profil pro
    Développeur .NET
    Inscrit en
    Décembre 2007
    Messages
    362
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Moselle (Lorraine)

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

    Informations forums :
    Inscription : Décembre 2007
    Messages : 362
    Points : 174
    Points
    174
    Par défaut Instancier un objet d'une Classe<T> en connaissant le Type
    Bonjour à tous,

    Je poursuis mon combat avec les collections génériques. Je tente une autre approche et je voudrais savoir comment je peux obtenir une instance de MaClasse<T> dans une classe qui possède comme donnée membre le Type.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    public class Colonne{
     
    private Type sousType;
     
    ....
    public IMaClasse getInstance(){
     
    //?????
     
    }
     
    }
    Bien entendu Maclasse<T> implémente IMaClasse.

    J'ai bien essayé de passer par la méthode statique Activator.createInstance(...), mais je n'obtiens jamais ce que j'attends.
    J'ai essayé aussi des choses, qui piquent un peu les yeux, du style
    MaClasse<this.type>();
    MaClasse<typeof(this.type)>();

    Donc comment est-il possible d'instancier MaClasse<T> en ayant le type défini dans une variable?

    Merci d'avance.

  2. #2
    Membre habitué
    Homme Profil pro
    Architecte C#
    Inscrit en
    Février 2003
    Messages
    78
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Architecte C#

    Informations forums :
    Inscription : Février 2003
    Messages : 78
    Points : 144
    Points
    144
    Par défaut
    bonjour, l'exemple suivant avec une liste générique :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
                var typeBase = typeof (List<>);
                var genericType = typeBase.MakeGenericType(typeof (int));
                var list = Activator.CreateInstance(genericType);
    remplacer le typeBase par celui que tu souhaite, dans ton cas, ca donnera:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    var typeBAse = typeof(MaClasse<>);
    Bonne journée

  3. #3
    Membre habitué Avatar de touftouf57
    Profil pro
    Développeur .NET
    Inscrit en
    Décembre 2007
    Messages
    362
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Moselle (Lorraine)

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

    Informations forums :
    Inscription : Décembre 2007
    Messages : 362
    Points : 174
    Points
    174
    Par défaut
    Un énorme merci, Vimaire.

    Cela fonctionne. Avec un tel code, cela semble simple et évident.

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

Discussions similaires

  1. Réponses: 8
    Dernier message: 26/03/2011, 20h40
  2. Instanciation d'un objet dans une classe singleton
    Par mulfycrowh dans le forum Débuter
    Réponses: 1
    Dernier message: 16/09/2009, 15h52
  3. Réponses: 7
    Dernier message: 22/03/2007, 14h26
  4. Réponses: 4
    Dernier message: 08/03/2006, 19h07
  5. Réponses: 19
    Dernier message: 02/02/2006, 23h30

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