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 :

Utilisation type générique : List<T>


Sujet :

C#

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    33
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 33
    Points : 26
    Points
    26
    Par défaut Utilisation type générique : List<T>
    bonjour,

    je voudrais déclarer une méthode de classe abstraite :
    public abstract List<T> GetElements();

    et ensuite l'implémenter dans les classes filles :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    public override List<MonType> GetElements()
    {
      List<MonType> maListe;
       ....
       return maListe;
    }
    Mais ça ne compile pas.
    Erreur : Le type ou le nom d'espace de noms 'T' est introuvable (une directive using ou une référence d'assembly est-elle manquante*?)
    Je fais bien un : using System.Collections.Generic;

    Pouvez-vous m'aider svp ?

  2. #2
    Modérateur
    Avatar de DotNetMatt
    Homme Profil pro
    CTO
    Inscrit en
    Février 2010
    Messages
    3 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : CTO
    Secteur : Finance

    Informations forums :
    Inscription : Février 2010
    Messages : 3 611
    Points : 9 742
    Points
    9 742
    Billets dans le blog
    3
    Par défaut
    Tu dois faire de ta classe de abstraite une classe abstraite générique :
    Code C# : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    public abstract class AbstractClass<T>
    {
        public abstract List<T> GetElements();
    }
    Si T ne peut être qu'un type en particulier, précise-le afin de restreindre l'utilisation qui sera faite de la classe.

    Ensuite tu peux l'utiliser comme ceci par exemple :
    Code C# : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    public class TestClass : AbstractClass<string>
    {
        public override List<string> GetElements()
        {
        }
    }

  3. #3
    Membre éprouvé
    Avatar de neilbgr
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Août 2004
    Messages
    651
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

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

    Informations forums :
    Inscription : Août 2004
    Messages : 651
    Points : 1 177
    Points
    1 177
    Par défaut
    On peut aussi faire comme ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    public override List<T> GetElements<T>()
    {
      List<T> maListe;
       ....
       return maListe;
    }

  4. #4
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    33
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 33
    Points : 26
    Points
    26
    Par défaut
    Merci pour vos réponses. Ca marche.
    Mais est-ce que cela veut dire que mes classes seront du type T ? Parce-que moi je veux seulement qu'elle manipule des objets de ce type.

  5. #5
    Membre éprouvé
    Avatar de neilbgr
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Août 2004
    Messages
    651
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

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

    Informations forums :
    Inscription : Août 2004
    Messages : 651
    Points : 1 177
    Points
    1 177
    Par défaut
    La réponse de DotNetMatt touche toute la classe, ma réponse concerne uniquement la méthode.

  6. #6
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    33
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 33
    Points : 26
    Points
    26
    Par défaut
    Ta solution sur la méthode ne fonctionne pas.
    Dans ma classe abstraite j'ai : public abstract List<T> GetAllItems<T>();
    Dans ma classe qui hérite : public override List<MonType> GetAllItems<MonType>(){...}
    Dans ma méthode mes objet MonType ne sont pas reconnus.

Discussions similaires

  1. Réponses: 5
    Dernier message: 01/02/2011, 15h34
  2. Utiliser les type génériques
    Par moumoune65 dans le forum C#
    Réponses: 2
    Dernier message: 17/04/2009, 10h01
  3. Liste générique de types génériques
    Par le2tbomi dans le forum VB.NET
    Réponses: 7
    Dernier message: 17/07/2008, 23h16
  4. Réponses: 12
    Dernier message: 23/09/2006, 12h12
  5. Fuite de mémoire en utilisant le template list
    Par schtroumpf_farceur dans le forum Langage
    Réponses: 9
    Dernier message: 18/07/2005, 20h44

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