permet de dire que j'ai une classe qui implémente une interface générique interface publique iItem {}Une fonction mise en œuvre de l'interface générique et non générique
public interface IStuff<out TItem> where TItem : IItem
{
TItem FavoriteItem { get; }
}
public class MyStuff<TItem> : IStuff<TItem> where TItem : IItem
{
public TItem FavoriteItem
{
get { throw new NotImplementedException(); }
}
}
J'ai aussi une interface non générique
public interface IFavoriteItem
{
IItem FavoriteItem { get; }
}
Je voudrais que la classe MyStuff implémente cette interface IFavoriteItem. Puisque TItem implémente IItem il me semble que la propriété public TItem FavoriteItem
est déjà en train d'implémenter IFavoriteItem.
Mais le compilateur ne le pense pas, et il veut que je déclare un IItem IFavoriteItem.FavoriteItem
distinct dans MyClass. Pourquoi est-ce vrai? Est-ce que C# covariance n'est pas la chose qui devrait jouer ici et résoudre mon problème?
Merci
Comment ça peut ne pas être 'IItem', si j'ai explicitement spécifié' où TItem: IItem'? – Shaddix
Parce qu'il peut être une interface héritée de, ou une implémentation 'class' de' IItem'. Le 'where' ne spécifie pas qu'il doit être ** exactement **' IItem', mais à la place il doit être 'typeof (IItem) .IsAssignableFrom()'. Cependant, votre 'IFavoriteItem' a le type' IItem' exact spécifié. –
Je comprends, merci. – Shaddix