【发布时间】:2026-01-31 22:10:01
【问题描述】:
我有多个类(为了解释目的而进行了简化):
public class A : BaseClass,
IHandleEvent<Event1>,
IHandleEvent<Event2>
{
}
public class B : BaseClass,
IHandleEvent<Event3>,
IHandleEvent<Event4>
{
}
public class C : BaseClass,
IHandleEvent<Event2>,
IHandleEvent<Event3>
{
}
在我的“BaseClass”中,我有一个方法要检查子类是否实现了特定事件的IHandleEvent。
public void MyMethod()
{
...
var event = ...;
...
// If this class doesn't implement an IHandleEvent of the given event, return
...
}
来自this SO-answer 我知道如何检查一个对象是否实现了一个通用接口(实现IHandleEvent<>),像这样:
if (this.GetType().GetInterfaces().Any(x =>
x.IsGenericType && x.GenericTypeDefinition() == typeof(IHandleEvent<>)))
{
... // Some log-text
return;
}
但是,我不知道如何检查对象是否实现了特定的通用接口(实现 IHandleEvent<Event1>)。那么,如何在 if 中检查呢?
【问题讨论】:
-
除了直接回答您的问题(克里斯已经建议使用 is 运算符),我强烈建议您重新考虑设计。如果基类应该知道派生类(但不是所有派生类),那么您可能需要实现所需接口并用于覆盖派生类子集的第二级基类。如果你这样想,你可能也会更好地理解你正在建模的问题。
标签: c# generics types interface implementation