[英]C# generic interface covariance
我有一個接口IControl<IModel>
我SomeClass<TModel> where TModel:IModel
的泛型類SomeClass<TModel> where TModel:IModel
使用它,因此泛型類型參數TModel
派生自IModel
。
我有辦法
SetControl(IControl<IModel> control){
IControl<IModel> c = control;
....
但是我遇到了編譯器錯誤:
Error 9 Cannot implicitly convert type 'XYIControl<TModel>' to 'XYIControl<XYIModel>'. An explicit conversion exists (are you missing a cast?)
我懷疑這與差異有關,因此我嘗試將接口聲明更改為協變-根據文檔
我已經將該接口聲明為public interface IControl<out T> where T : IModel
,但這沒有幫助。 我想念什么?
我猜SetControl
實際上被聲明為:
public class SomeClass<TModel> where TModel : IModel
{
SetControl(IControl<TModel> control) { ... }
}
在這種情況下,如果IControl<T>
是協變的,則需要向TModel
添加class
約束:
public class SomeClass<TModel> where TModel : class, IModel
{
SetControl(IControl<TModel> control)
{
IControl<IModel> c = control;
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.