Salut à tous,
J’ai un bête problème d’héritage dans une appli. Je vous expose le contexte :
- Un Objet dont on gère l’historique des modif, Objet qui hérite de Base
- Un objet représentant une modification d’un Objet, ObjetHistorique qui hérite aussi de Base
- Objet contient une liste de ObjetHistorique de type BaseList<ObjetHistorique>
Je rajoute les déclarations pour que ce soit clair :
Jusque là, pas de problème.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 public partial class Objet : Base { public BaseList<ObjetHistorique> Historique { get; set; } } public class BaseList<T> : List<T> where T : Base { } public partial class ObjetHistorique : Base { }
Maintenant j’ai d’autres objets à historiser, et je souhaite créer une interface pour les éléments à historiser permettant d’avoir un système générique d’affichage des différentes modifications.
J’ai d’abord créé une interface pour les éléments d’historique :
Donc ObjetHistorique implémente maintenant IHistoryElement.
Code : Sélectionner tout - Visualiser dans une fenêtre à part public interface IHistoryElement {}
Cette interface ne contient que des propriétés.
Ensuite je crée une interface pour les Objets souhaitant exposer leur historique :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 public interface IHistoryProvider<T> where T : IHistoryElement { IList<T> Historique { get; set ; } }
Et c’est la que ça coince, lorsque je souhaite ajouter la déclaration d’implémentation de IHistoryProvider<IHistoryElement> dans la classe Objet, il me dit que cette dernière n’implémente pas le bon membre à savoir Historique. Or BaseList<> héritant de List<>, il me semblait qu’elle implémentait automatiquement IList<>. Me serais je trompé ?
Quelqu’un pourrait-il éclairer ma lanterne ?
Partager