У меня есть несколько классов (упрощено для объясняющих целей):Проверьте объект реализует конкретный общий интерфейс
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?
Нечто подобное http://stackoverflow.com/ questions/31855832/how-to-define-if-class-inherits-dictionary? – Eser
Помимо прямого ответа на ваш вопрос (Крис уже предложил использовать оператора is), я настоятельно рекомендую вам переосмыслить дизайн. Если базовый класс должен знать о производных классах (но не всех), то может оказаться возможным, что вам нужен второй уровень базового класса, который реализует требуемый интерфейс и используется для покрытия этого подмножества производных классов. Если вы так думаете, вы также можете лучше понять проблему, которую вы моделируете. –