类型“”不能用作泛型类型或方法“”中的类型参数“”。没有从 '' 到 '' 的隐式引用转换
The type '' cannot be used as type parameter '' in the generic type or method ''. There is no implicit reference conversion from '' to ''
我正在尝试在 View - Controller 类中实现一些泛型。我的 "framework" 看起来像这样:
控制器:
public interface IController<TView> where TView : IView
{
// some generic fields / methods definitions
}
public abstract class BaseController<TView> : IController<TView> where TView : IView
{
// some generic fields / methods implementation
}
public interface IConcreteController
{
// some specific fields / methods definition
}
public class ConcreteController<TView> : BaseController<TView>, IConcreteController where TView : IView
{
// specific implementation
}
观看次数:
public abstract class IView : UserControl // MARKER
{
}
public class BaseView<TController> : IView where TController : IController<IView>
{
// some generic fields / methods implementation
}
public abstract class IConcreteView : BaseView<IConcreteController>
{
// some specyfic fields methods definition
}
public class ConcreteView : IConcreteView
{
// some specific fields methods implementation
}
但是我在 IConcreteView 文件中得到一个错误:
The type 'IConcreteController' cannot be used as type parameter
'TController' in the generic type or method 'BaseView'.
There is no implicit reference conversion from 'IConcreteController'
to 'IController'.
我应该解决什么问题才能让这个 "template" 正常工作?
更新:
作为 Ned Stoyanov 建议:
我将 ConcreteView 更改为:
public class ConcreteView<TController> : BaseView<TController>, IConcreteView where TController : IController<IView>
和IConcreteView到:
public interface IConcreteView
现在可以使用了。
我认为问题出在你对 IConcreteView
的定义上
public abstract class IConcreteView : BaseView<IConcreteController>
它继承自 BaseView<IConcreteController>
并且 class BaseView<TController>
有一个约束,即 TController
必须是 IController<IView>
BaseView<TController> : IView where TController : IController<IView>
但是 IConcreteController
不是 IController<IView>
,它只是一个独立的界面,因此出现错误消息。
我不确定接口 IConcreteController
和 IConcreteView
是否取得了很大的成就,我只是完全摆脱它们。
我正在尝试在 View - Controller 类中实现一些泛型。我的 "framework" 看起来像这样:
控制器:
public interface IController<TView> where TView : IView
{
// some generic fields / methods definitions
}
public abstract class BaseController<TView> : IController<TView> where TView : IView
{
// some generic fields / methods implementation
}
public interface IConcreteController
{
// some specific fields / methods definition
}
public class ConcreteController<TView> : BaseController<TView>, IConcreteController where TView : IView
{
// specific implementation
}
观看次数:
public abstract class IView : UserControl // MARKER
{
}
public class BaseView<TController> : IView where TController : IController<IView>
{
// some generic fields / methods implementation
}
public abstract class IConcreteView : BaseView<IConcreteController>
{
// some specyfic fields methods definition
}
public class ConcreteView : IConcreteView
{
// some specific fields methods implementation
}
但是我在 IConcreteView 文件中得到一个错误:
The type 'IConcreteController' cannot be used as type parameter 'TController' in the generic type or method 'BaseView'. There is no implicit reference conversion from 'IConcreteController' to 'IController'.
我应该解决什么问题才能让这个 "template" 正常工作?
更新:
作为 Ned Stoyanov 建议:
我将 ConcreteView 更改为:
public class ConcreteView<TController> : BaseView<TController>, IConcreteView where TController : IController<IView>
和IConcreteView到:
public interface IConcreteView
现在可以使用了。
我认为问题出在你对 IConcreteView
public abstract class IConcreteView : BaseView<IConcreteController>
它继承自 BaseView<IConcreteController>
并且 class BaseView<TController>
有一个约束,即 TController
必须是 IController<IView>
BaseView<TController> : IView where TController : IController<IView>
但是 IConcreteController
不是 IController<IView>
,它只是一个独立的界面,因此出现错误消息。
我不确定接口 IConcreteController
和 IConcreteView
是否取得了很大的成就,我只是完全摆脱它们。