Interfaces et contraintes génériques
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:
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:
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:
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 ?