[英]One function implementing Generic and non-generic interface
可以說我有一個類,該類實現了通用接口IItem {}
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(); }
}
}
我也有一個非通用接口
public interface IFavoriteItem
{
IItem FavoriteItem { get; }
}
我想讓MyStuff類實現此IFavoriteItem接口。 由於TItem實現了IItem,在我看來, public TItem FavoriteItem
屬性已經實現了IFavoriteItem。
但是編譯器不這么認為,它希望我在MyClass中聲明一個單獨的IItem IFavoriteItem.FavoriteItem
。 為什么會這樣呢? C#協方差不是應該在這里解決我的問題的東西嗎?
謝謝
這樣做的原因是, FavoriteItem
的IFavoriteItem
可能不是 IItem
,其中在IFavoriteItem
,它必須是一個IItem
。 解決此問題的唯一方法是:
IItem IFavoriteItem.FavoriteItem
{
get { return FavoriteItem; }
}
這將簡單地將對TItem
實現的調用快捷方式化。
IEnumerable<>
的實現是一個經常使用此方法的好例子。 這些通常看起來像這樣:
public class MyEnumerable : IEnumerable<T>
{
public IEnumerator<T> GetEnumerator()
{
throw new NotImplementedException();
}
IEnumerator IEnumerable.GetEnumerator()
{
return GetEnumerator();
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.