【发布时间】:2021-07-28 04:51:05
【问题描述】:
对于令人困惑的标题,我深表歉意,我不太清楚如何简明扼要地表达我的问题。 在这里,我有一个无法编译的类结构。
class MyEvent
{ }
class EventA : MyEvent
{ }
class EventB : MyEvent
{ }
class MyEventHandler<T>
where T : MyEvent
{ }
class EventAHandler : MyEventHandler<EventA>
{ }
class EventBHandler : MyEventHandler<EventB>
{ }
/*** Tests ***/
abstract class MyEventHandlerTesterBaseClass<SomeEventHandler>
where SomeEventHandler : MyEventHandler<MyEvent>
{
// Plan to set up handler for the concrete test classes below.
protected SomeEventHandler handler;
}
class EventAHandlerTests : MyEventHandlerTesterBaseClass<EventAHandler>
{ }
class EventBHandlerTests : MyEventHandlerTesterBaseClass<EventBHandler>
{ }
这会导致我的class EventAHandlerTests 定义出现以下错误:
The type 'EventAHandler' must be convertible to 'MyEventHandler<MyEvent>' in order to use it as parameter 'SomeEventHandler' in the generic class 'MyEventHandlerTesterBaseClass<SomeEventHandler>'
EventBHandlerTests 也是如此。
我的理解是EventAHandler 应该可以转换为MyEventHandler<MyEvent>,因为EventAHandler 继承MyEventHandler<EventA>,因此EventA 应该动态绑定到MyEvent。
我做错了吗?或者这是不可能的?
【问题讨论】:
标签: c# generics inheritance dynamic-binding