C# 当基类也具有泛型时,是否可以继承具有泛型的类?
我为标题的混乱道歉,我不太确定如何简明扼要地表达我的问题。 在这里,我有一个不编译的类结构C# 当基类也具有泛型时,是否可以继承具有泛型的类?,c#,generics,inheritance,dynamic-binding,C#,Generics,Inheritance,Dynamic Binding,我为标题的混乱道歉,我不太确定如何简明扼要地表达我的问题。 在这里,我有一个不编译的类结构 class MyEvent { } class EventA : MyEvent { } class EventB : MyEvent { } class MyEventHandler<T> where T : MyEvent { } class EventAHandler : MyEventHandler<EventA> { } class EventBHand
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>
{ }
对于EventBHandlerTests
也是如此
我的理解是,EventAHandler
应该可以转换为MyEventHandler
,因为EventAHandler
继承了MyEventHandler
,因此EventA
应该动态绑定到MyEvent
我做错什么了吗?或者这是不可能的?问题是T类型的泛型类不能强制转换为U:T类型的另一个泛型类 例如:
class Foo{}
类栏:Foo{}
无效测试()
{
列表栏;
List foos=bar;//不起作用!!!
}
在您的情况下,MyEventHandler-baseclass
期望泛型类型为MyEventHandler
,但EventAHandler
的类型为MyEventHandler
,因此不起作用。这可以通过使用以下两种泛型来避免:
抽象类MyEventHandlerTesterBaseClass
唐德勒在哪里:我的唐德勒
其中TEvent:MyEvent
这是否回答了您的问题?
The type 'EventAHandler' must be convertible to 'MyEventHandler<MyEvent>' in order to use it as parameter 'SomeEventHandler' in the generic class 'MyEventHandlerTesterBaseClass<SomeEventHandler>'