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 :

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 { }
Jusque là, pas de problème.

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 :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
public interface IHistoryElement {}
Donc ObjetHistorique implémente maintenant 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 ?