C# - 如何从继承类型转换为运行时类型

我在运行时处理正确类型时遇到问题。


我希望我的代码根据参数类型动态检测应该调用哪个处理程序。我不想在代码中将 TEvent 转换为正确的类型。


所有处理程序都继承自我的界面:


public interface IAbstractHandler < in T>  

{

   void Handle(T evnt);

}

例子:


public class SpecificEventHandler: IAbstractHandler< SpecificEvent>

{

   public void Handle(SpecificEvent evnt) {

    ....

   }

}

TEvent.cs:


public class TEvent

{

}

处理程序中使用的所有其他事件都源自 TEvent。


这是一些代码:


List<TEvent> eventItems = new List<TEvent>();

....

foreach (var evt in eventItems) {

  ...

  dynamic eventHandler = ResolveEventHandler(evt.GetType().Name);

  if (evt is MySubtypeEvent subEvent) {

    eventHandler.Handle(subEvent); // <-- this works, but I don't want this.

  }

  eventHandler.Handle(evt); // <-- And this fails, because 'evt' is seemingly 

  // a TEvent even though it's of the correct subclass.

}

我正在寻找的是一种使 'evt' 不是 TEvent 而是真正类型的方法,但无需对其进行硬编码,这将使我的 'eventHandler.Handle()' 方法起作用(我认为)。


Helenr
浏览 202回答 1
1回答
打开App,查看更多内容
随时随地看视频慕课网APP