0
可以说我有一个类,它实现了一个通用接口 公共接口的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#协方差不是应该在这里玩的东西,解决我的问题吗?
感谢
如果我明确指定'Where TItem:IItem',它可能不是'IItem'? – Shaddix 2010-10-29 07:34:12
因为它可以是'IItem'的继承接口,或'class'实现。 'where'没有指定它必须**完全**'IItem',而是它必须是'typeof(IItem).IsAssignableFrom()'。但是,您的'IFavoriteItem'具有指定的确切'IItem'类型。 – 2010-10-29 07:36:56
我明白了,谢谢。 – Shaddix 2010-10-29 08:00:34