我有一个基类(顺序)与一组子类(生产者,特殊订单,零件订单等).
只有其中一些子类实现了一个特定的接口(ITrackingCustomer),该接口具有单个方法声明(object getcustdetails()).
作为我的解决方案的一部分,我的所有订单都在中心位置处理,即任何crud方法都通过中心层.在这个中心层,我想做以下事情:
如果订单类型为ITrackingCustomer
然后调用方法getcustdetails()
我使用以下代码工作:
if (typeof(ITrackingCustomer).IsAssignableFrom(Order.GetType()))
{
MethodInfo theMethod = Order.GetType().GetMethod("getcustdetails");
object y = theMethod.Invoke(Order, null);
}
Run Code Online (Sandbox Code Playgroud)
我对第一部分使用isassignable来感到满意,但是想对第二部分使用性能较低的方法(即使用invoke进行反射).
我的问题是:
有没有更有效的方法来执行此操作,因为我已经读过使用invoke命令是昂贵的.