我真的在所有的協方差問題中搜索,沒有什麼看起來像我的問題。在非泛型類中的C#協方差
我有一個用戶控件(這個類不能是通用的,出於顯而易見的原因),它看起來像這樣:
class MyUserControl : UserControl
{
private BaseDao<object> _dao;
private AppointmentMapping<object> _mapping;
// I need these 2 generics to type safe the mapping/dao relation
public void RegisterPersistence<T>(BaseDao<T> dao, AppointmentMapping<T> mapping)
{
// These two dont work. even with safe and unsafe casting.
_dao = dao;
_mapping = mapping;
}
}
我已經嘗試過存儲協方差,接口委託等它只是不要存儲對象! 我怎樣才能做到這一點?這很容易用Java實現。
這個問題似乎與'UserControl'無關。它可以發生在任何類。你可以考慮編輯這個問題,使它更「通用」... –
我不知道BaseDao和AppointmentMapping的定義,但如果它們確實是泛型類,泛型參數沒有共同/反對差異在C# – SWeko
關鍵是你不告訴你以後如何訪問這些字段。當然,將它們存儲爲'object'將起作用。如果以後需要在另一個代碼塊中訪問這些字段,則需要再次使用'',然後您可以強制轉換爲對應於正確的實現,或將使用該字段的代碼註冊到委託中(類型爲Action) ,例如並在稍後執行。否則,使BaseDoa和AppointmentMapping實現非通用接口並將其用於字段類型。 –
Sebastian