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 :

Interface et List<InterfaceDetail>


Sujet :

C#

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé

    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mars 2011
    Messages
    37
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Oise (Picardie)

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

    Informations forums :
    Inscription : Mars 2011
    Messages : 37
    Par défaut Interface et List<InterfaceDetail>
    Bonjour à tous,

    J'ai une petite question concernant les interfaces.

    J'ai deux interfaces IFacture et IFactureDetail qui représentent des classes d'entités.

    Deux classes implémentent IFacture, Facture et FactureUI, deux autres classes implémentent IFactureDetail, FactureDetail et FactureDetailUI.

    Mes classes Facture et FactureUI doivent respectivement posséder des membres de List de leur détail.

    Comment faire pour que Facture et FactureUI respectent bien leur contrat d'interface qui contient une List<IFactureDetail> ?

    Merci

    Axel

  2. #2
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Par défaut
    Comment faire pour que Facture et FactureUI respectent bien leur contrat d'interface qui contient une List<IFactureDetail> ?
    Bah tu déclares cette propriété dans la classe, comme pour les autres membres d'interface... je comprends pas trop ton problème, il faudrait que tu expliques plus clairement ce qui te gène.

  3. #3
    Membre émérite

    Homme Profil pro
    Développeur .NET
    Inscrit en
    Juin 2011
    Messages
    487
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Finance

    Informations forums :
    Inscription : Juin 2011
    Messages : 487
    Par défaut
    Je pense qu'il cherche à s'assurer que les classes qui implémentent son interface implémentent également des membres List.

    Je crois pas que ce soit possible avec une interface, il te faudrait une classe mère abstraite implémentant l'interface et la List que tu souhaites. Il faut ensuite faire dériver tes classes de cette classe mère.
    Mon blog sur les technos .NET et Agile -> http://blog.developpez.com/maximepalmisano/

  4. #4
    Membre éclairé

    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mars 2011
    Messages
    37
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Oise (Picardie)

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

    Informations forums :
    Inscription : Mars 2011
    Messages : 37
    Par défaut
    Clairement je souhaite que Facture et FactureUI implémentent IFacture, sans leur passer List<IFacture> mais bel et bien leur liste respective.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    public interface IFacture
    {
    //Membres de l'interface
     
    List<IFactureDetail> Detail {get;set;}
    }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    public class Facture : IFacture
    {
    //Membres de la classe
     
     
    private List<FactureDetail> _Detail;
    public List<FactureDetail> Detail 
    {
    get{return _Detail;}
    set{_Detail = value;}
    }
    }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    public class FactureUI : IFacture
    {
    //Membres de la classe
     
     
    private List<FactureDetailUI> _Detail;
    public List<FactureDetailUI> Detail 
    {
    get{return _Detail;}
    set{_Detail=value;}
    }
    }
    Je suis plus clair?

  5. #5
    Rédacteur
    Avatar de Nathanael Marchand
    Homme Profil pro
    Expert .Net So@t
    Inscrit en
    Octobre 2008
    Messages
    3 615
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Expert .Net So@t
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2008
    Messages : 3 615
    Par défaut
    A moins que tu utilises des génériques, ceci n'est pas possible pour la simple et bonne raison qu'une List<FactureDetail> n'est pas une List<IFactureDetail> (être au sens de l'héritage en poo).

    Tu peux donc avec les génériques avoir un truc comme ca:
    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
    public interface IFactureDetail
    {}
     
    public interface IFacture<TDetail> where TDetail : IFactureDetail
    {
    	List<TDetail> Detail {get;set;}
    }
     
    public class FactureDetail : IFactureDetail
    {}
     
    public class Facture : IFacture<FactureDetail>
    {
    	private List<FactureDetail> _Detail;
    	public List<FactureDetail> Detail 
    	{
    		get{return _Detail;}
    		set{_Detail = value;}
    	}
    }

  6. #6
    Rédacteur
    Avatar de SaumonAgile
    Homme Profil pro
    Team leader
    Inscrit en
    Avril 2007
    Messages
    4 028
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Team leader
    Secteur : Conseil

    Informations forums :
    Inscription : Avril 2007
    Messages : 4 028
    Par défaut
    Citation Envoyé par Nathanael Marchand Voir le message
    A moins que tu utilises des génériques, ceci n'est pas possible pour la simple et bonne raison qu'une List<FactureDetail> n'est pas une List<IFactureDetail> (être au sens de l'héritage en poo).
    De mémoire ça devrait être possible avec une implémentation explicite de l'interface, non ?
    Besoin d'un MessageBox amélioré ? InformationBox pour .NET 1.1, 2.0, 3.0, 3.5, 4.0 sous license Apache 2.0.

    Bonnes pratiques pour les accès aux données
    Débogage efficace en .NET
    LINQ to Objects : l'envers du décor

    Mon profil LinkedIn - MCT - MCPD WinForms - MCTS Applications Distribuées - MCTS WCF - MCTS WCF 4.0 - MCTS SQL Server 2008, Database Development - Mon blog - Twitter

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

Discussions similaires

  1. Problème d'interface et List<>
    Par Ishizaki dans le forum ASP.NET
    Réponses: 1
    Dernier message: 29/04/2008, 14h19
  2. Interface en zone de liste
    Par Kihmé Xs dans le forum IHM
    Réponses: 4
    Dernier message: 12/06/2007, 10h18
  3. implementer interface list en généric
    Par goldorax113 dans le forum Langage
    Réponses: 9
    Dernier message: 16/10/2006, 12h47
  4. Liste des implémentations d'une interface
    Par YokoSop dans le forum Langage
    Réponses: 12
    Dernier message: 07/07/2006, 23h37
  5. [Interface Homme Machine] Liste des interactions possibles
    Par dymezac dans le forum Interfaces Graphiques en Java
    Réponses: 5
    Dernier message: 27/01/2006, 11h45

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