我有一个界面IControl<IModel>
我在通用类中使用它SomeClass<TModel> where TModel:IModel
,
所以泛型类型参数TModel
源自IModel
.
我有一个方法
SetControl(IControl<IModel> control){
IControl<IModel> c = control;
....
但我收到编译器错误:
Error 9 Cannot implicitly convert type 'X.Y.IControl<TModel>' to 'X.Y.IControl<X.Y.IModel>'. An explicit conversion exists (are you missing a cast?)
我怀疑这与方差有关,所以我尝试将接口声明更改为协变 - 根据文档 http://msdn.microsoft.com/en-us/library/dd799517%28v=vs.110%29.aspx协方差 - 使您能够使用比最初指定的更具体的类型。
我已将接口声明为public interface IControl<out T> where T : IModel
,但这并没有帮助。我缺少什么?
我正在猜测SetControl
实际上声明为:
public class SomeClass<TModel> where TModel : IModel
{
SetControl(IControl<TModel> control) { ... }
}
在这种情况下你需要添加一个class
约束到TModel
if IControl<T>
是协变的:
public class SomeClass<TModel> where TModel : class, IModel
{
SetControl(IControl<TModel> control)
{
IControl<IModel> c = control;
}
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)