[英]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.