说我有下面的代码:在编译时未知类型时如何选择方法重载?
public class SomeClass
{
// Other stuff...
public void ApplyEvent<T>(IPublishedEvent<T> evt)
{
Handle(evt.Payload);
}
protected virtual void Handle(ThingyCreatedEvent evt)
{
Code = evt.Code;
Label = evt.Label;
}
protected virtual void Handle<T>(T evt)
{
throw new NotImplementedException(
String.Format("Not set to handle {0}", evt.GetType().FullName));
}
}
evt.Payload是类型T的我的希望是能够处理特定事件类型的我期待的方法,并具有将抛出一个包罗万象的方法如果出于某种原因提供了意外的事件类型。
什么我发现,虽然是通用的方法被调用,即使T是类型ThingyCreatedEvent的,除非我明确地投它:
Handle(evt.Payload as ThingyCreatedEvent);
我得到,如果同样的结果,而不是通用Handle方法,我用一个Object类型参数定义一个Handle方法。
任何人都可以解释这一点吗?我想更好地了解这里发生的事情。我希望它能根据运行时提供的实际类型进行调度。
.NET泛型不是C++模板。 C++模板不是.NET泛型。没有人提供运行时分派。 – 2011-05-25 19:22:06