我在我的應用程序中有幾個Get____Factory
方法,我想將它們與泛型整合,但我仍在調整C#和a)不是100%確定泛型是正確的方法去和b)我仍然在學習C#如何處理泛型。使用泛型映射接口類型到類
我最終會有一個工廠界面及其類的字典/映射。我不僅希望將我所有的工廠整合到一個易於訪問的方法中,而且還需要允許插件作者以自己的方式進行註冊(並以此方式訪問它們)。
我開始是這樣的:
注:最終將有一本字典或方式接口類型映射到它們的實現 - 的的if/else條件是醜陋的和暫時的,但一個簡單的方法來測試。
public T GetFactory<T>() where T : IFactory {
var t = typeof(T);
if (t.Equals(typeof(IRecipeFactory))) {
var factory = new RecipeFactory();
return factory;
}
else if (t.Equals(typeof(IItemFactory))) {
var factory = new ItemFactory();
return factory;
}
else if (t.Equals(typeof(ITileFactory))) {
var factory = new TileFactory();
return factory;
}
}
它與Cannot implicitly convert type 'RecipeFactory' to 'T'
失敗,所以這是行不通的。從長遠來看,我不會有條件,而是會按照類型查找班級。但是,只有找到解決方案才能解決投射問題,兩者都無法解決問題。
根據其他答案,我嘗試了雙重鑄造((T) (object)
),但與InvalidCastException: Cannot cast from source type to destination type.
錯誤。
要麼這是一個糟糕的架構,要麼我錯誤地使用泛型。
你爲什麼要返回一個泛型類型,但是,你有一個特定類型的對象在return語句!? – niceman
我想如果你把2個或更多的'Get ___ Factory'方法的例子,那麼也許我們可以幫助 – niceman
正如我在文章中提到的,我想提供一個工廠接口到他們實例的映射。我可能會結束十幾個SomethingFactory類。該方法暴露給插件,這些插件沒有直接訪問實現,只有接口。我會添加更多的例子 – helion3