我有一個基本類型B和多個派生子類型,C1:B,C2:B,C3:B等C#通行證發揮功能的子列表作爲基礎列表
我有每個孩子的列表類型,ListL1,ListL2,ListL3。
對於每個孩子類型,我都有工作函數F1,F2,F3,它們爲那個孩子取得相應的列表L1,L2,L3,並完成本質上相同的功能(僅處理B的屬性),但對於相應的類型,C1,C2,C3。
我希望有一個函數,基於列表的基本類型,列表「多態」執行函數獨立於子類型。
我知道,我應該能夠通過與模板符我的函數聲明固定在-列表傳遞到我的功能,是這樣的:
public void Fn<T>(List<T> BList) { /* do stuff */ }
我希望我的每一個孩子的功能,F1, F2,F3,調用基函數,像
public void F1(List<C1> L1)
{
Fn(L1); // this is the line that fails
}
我試圖重鑄爲基型,B
Fn((List<B>)L1);
但是,我得到一個錯誤說我不能轉換型「System.Collections.Generic.List」到「System.Collections.Generic.List」即使C1從B.
我已經得出也試過在FN名infixing類型:
Fn<C1>(L1);
Fn<C1>( (List<B>)L1);
我發現建議說,我要投我的孩子名單作爲基類列表(失敗對我來說)和我的泛型函數中,FN,檢查無論我的傳遞列表是否爲特定類型,然後執行特定於該類型的單獨代碼。除了推薦的不適合我的工作外,這似乎打敗了OOP的多態性,以便在泛型函數中仍然具有子類專用代碼。
我希望有一些真正的抽象/通用手段,通過它不重複代碼,從而將我的子列表視爲基礎列表。
任何人都可以告訴我如何做到這一點?
謝謝。
這似乎是我的解決方案。謝謝。 – user2340426