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

Windows Forms Discussion :

Utilisation des interfaces dans des méthodes


Sujet :

Windows Forms

  1. #1
    Membre du Club
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Mai 2005
    Messages
    51
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Mai 2005
    Messages : 51
    Points : 50
    Points
    50
    Par défaut Utilisation des interfaces dans des méthodes
    Bonjour à tous,

    Voici mon soucis :

    j'ai créé cette interface
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    public interface IObject
    {
        List<String> ObtenirEntetes();
        List<String> ObtenirValeurs();
    }
    que j'utilise dans cette classe :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    public class Groupe : IObject
    {
            public List<String> ObtenirValeurs() { [...] }
     
            public List<String> ObtenirEntetes() { [...] }
    }
    Puis dans une autre classe je définie la méthode suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    public void setList(List<IObject> listOp) { }
    puis j'essaye le code suivant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    OO.setList(new List<IObject>());
    et à la compilation je me fais jeter car il ne sait pas caster ma List<Groupe> en List<IObject>.

    Pourtant ma classe Groupe implémente l'interface IObject.

    Merci pour toutes les aides

    a+

    Cyril

  2. #2
    Expert éminent
    Avatar de StormimOn
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2005
    Messages
    2 593
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Sarthe (Pays de la Loire)

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

    Informations forums :
    Inscription : Mai 2005
    Messages : 2 593
    Points : 7 660
    Points
    7 660
    Par défaut
    Ce n'est pas parce que ta classe Group implémente IObject que tu auras une conversion implicite entre List<Group> et List<IObject>.

    Soit tu changes le prototype de ta méthode pour attendre une List<IObject> au lieu de List<Group>.
    Soit tu regardes du côté de la méthode ConvertAll.
    Pas de questions techniques par MP

  3. #3
    Membre du Club
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Mai 2005
    Messages
    51
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Mai 2005
    Messages : 51
    Points : 50
    Points
    50
    Par défaut
    Ouai j'y avais pensé mais c'est une liste provenant d'nhibernate donc pas facile de changer le prototype lol

    Je vais me retourner vers la méthode que tu parles en deuxième point et voir ce qu'elle peut faire

    Encore merci

  4. #4
    Membre averti
    Inscrit en
    Octobre 2005
    Messages
    400
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 400
    Points : 444
    Points
    444
    Par défaut
    Si tu utilise le framework 3.5 tu peux peut-être passer par un truc du genre :

    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
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    class Program
        {
            static void Main(string[] args)
            {
                AutreClasse a = new AutreClasse();
                List<Groupe> g = new List<Groupe>();
                g.Add(new Groupe());
                a.setList(g.Cast<IObject>().ToList());
            }
        }
     
     
        public class AutreClasse
        {
            public void setList(List<IObject> objs)
            {
            }
        }
     
        public class Groupe : IObject
        {
            #region IObject Members
     
            public List<string> ObtenirEntetes()
            {
                throw new NotImplementedException();
            }
     
            public List<string> ObtenirValeurs()
            {
                throw new NotImplementedException();
            }
     
            #endregion
        }
     
     
        public interface IObject
        {
            List<String> ObtenirEntetes();
            List<String> ObtenirValeurs();
        }

  5. #5
    Inactif  
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Janvier 2007
    Messages
    6 604
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet NTIC

    Informations forums :
    Inscription : Janvier 2007
    Messages : 6 604
    Points : 13 314
    Points
    13 314
    Par défaut
    Pourquoi ne pas rendre générique la méthode setList ? ce serait le plus simple non ?

    Je ne réponds pas aux questions techniques par MP ! Le forum est là pour ça...


    Une réponse vous a aidé ? utiliser le bouton

    "L’ennui dans ce monde, c’est que les idiots sont sûrs d’eux et les gens sensés pleins de doutes". B. Russel

  6. #6
    Membre du Club
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Mai 2005
    Messages
    51
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Mai 2005
    Messages : 51
    Points : 50
    Points
    50
    Par défaut
    Citation Envoyé par oyigit Voir le message
    Si tu utilise le framework 3.5 tu peux peut-être passer par un truc du genre :

    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
    class Program
        {
            static void Main(string[] args)
            {
                AutreClasse a = new AutreClasse();
                List<Groupe> g = new List<Groupe>();
                g.Add(new Groupe());
                a.setList(g.Cast<IObject>().ToList());
            }
        }
     
     
        public class AutreClasse
        {
            public void setList(List<IObject> objs)
            {
            }
        }
    Effectivement je n'avais pas du tout pensé à ceci... pour l'instant j'ai contourné le problème en passant pas List<List<String>> .... (j'aurai pu aussi faire un tableau à 2D ...)

    Je vais voir pour ta solution si elle me convient

  7. #7
    Membre du Club
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Mai 2005
    Messages
    51
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Mai 2005
    Messages : 51
    Points : 50
    Points
    50
    Par défaut
    Citation Envoyé par Bluedeep Voir le message
    Pourquoi ne pas rendre générique la méthode setList ? ce serait le plus simple non ?
    Justement l'idée c'était d'être générique avec l'ensemble de mes objets nhibernate qui eux implémente l'interface IObject ...

    Tu peux être plus précis dans ce que tu avances ?

    Merci,

    Cyril

  8. #8
    Membre averti
    Inscrit en
    Octobre 2005
    Messages
    400
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 400
    Points : 444
    Points
    444
    Par défaut
    Pour la solution générique, il s'agit d'avoir une classe de base générique du genre

    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
    public class BaseClass<TObject>
     where  TObject : IObject
    {
       public abstract void setList(List<TObject> objs);
    }
     
    public class Groupe : BaseClass<TObject>
    {
      public void setList(List<Groupe> objs);
    }
     
    public class BaseGroupe : IObject
    {
     ...
    }
    Le problème est ta classe est fortement typé, à chaque type va falloir définir une nouvelle classe qui hérite de la classe mère. Ta méthode setList ne pourra prendre qu'une List<Groupe> et pas de List<IObject>
    En revanche, le typage fort te permet de t'assurer du bon type de tes données.

    A toi de voir selon tes besoins

Discussions similaires

  1. Comment ajouter des séries dans des graphes sur des feuilles variables
    Par Molomarcopolo dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 06/07/2012, 16h26
  2. Réponses: 8
    Dernier message: 21/05/2007, 23h59
  3. Réponses: 6
    Dernier message: 01/04/2007, 20h13
  4. Utilisation de tubes dans des fork
    Par je®ome dans le forum Linux
    Réponses: 4
    Dernier message: 31/05/2006, 21h50
  5. Réponses: 2
    Dernier message: 27/04/2006, 16h45

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