我試圖解決在C#中返回類型協方差的支持不足的問題,如this問題及其前兩個答案中所述。大多數情況下,我在設置演員時沒有任何問題,但是使用對象/接口列表的一個屬性妨礙了我的努力。之間的列表<MyType>和列表之間施展<IMyType>
我需要做什麼才能使IFoo.manyBars
的演員陣容工作?
public interface IBar
{
}
public interface IFoo
{
IBar aBar { get; set; }
IEnumerable<IBar> manyBars { get; set; }
}
class CBar : IBar
{
}
class CFoo : IFoo
{
public CBar aBar { get; set; }
//this cast works
IBar IFoo.aBar
{
get { return aBar; }
set { aBar = (CBar)value; }
}
public List<CBar> manyBars { get; set; }
//the compiler can't cast either of these
List<IBar> IFoo.manyBars
{
get { return (List<IBar>)manyBars; }
set { manyBars = (List<CBar>)value; }
}
}
將我的界面切換到IEnumerable不是問題,這樣做會避免使用Linq來執行強制轉換結果的問題。 –
2010-11-15 21:06:17
- 類的用戶將無法刪除項目,因爲'IEnumerable'接口暴露無刪除機制。所以對用戶而言,它會*不會令人驚訝,因爲他們甚至不能*嘗試*刪除項目。 –
cdhowie
2010-11-15 21:12:38
我想我可以忍受,因爲IFoo/IBar消費者就是我想要封裝的東西,並且向接口添加/刪除方法似乎不會造成任何主要問題。 CFoo和COtherFoo應用程序的其餘部分可以繼續使用列表 /列表版本。 –
2010-11-15 21:22:31