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