我有一个接口方法
public void Execute(ICommand command);
它需要将已知的子类型传递ICommand
给适当的Handle(SpecificCommand command)
方法实现并对未知类型进行一些通用处理。我正在寻找一种通用(即不需要巨型开关)的方法,类似于
Handle(command as command.GetType()); // this obviously does not compile
我知道我可以以某种方式注册处理程序,例如将它们作为委托存储在字典中,但这仍然需要复制处理逻辑(一次在特定Handle(...)
方法签名中,一次在委托请求中)。如果我通过用反射检查我的类(寻找Handle(XXX command)
方法)来填充字典,我会受到性能影响。
总结一下:我怎样才能向下转换一个对象(通过调用向上转换Execute(ICommand command)
)来调用一个需要具体类型的方法,而不知道它在编译时是哪种类型。