У меня есть базовый класс (заказ) с набором подклассов (продюсер, спецзаказ, запчасть и т. Д.).
Только некоторые из этих подклассов реализуют определенный интерфейс (ITrackingCustomer), который имеет одно объявление метода (объект getcustdetails ()).
Как часть моего решения, все мои заказы обрабатываются в центральном месте, то есть любые грубые методы проходят через центральный слой. В этом центральном слое я хочу сделать следующее:
Если заказ имеет тип ITrackingCustomer
Затем вызывает метод getcustdetails ()
У меня это работает, используя следующий код:
if (typeof(ITrackingCustomer).IsAssignableFrom(Order.GetType()))
{
MethodInfo theMethod = Order.GetType().GetMethod("getcustdetails");
object y = theMethod.Invoke(Order, null);
}
Я доволен первой частью, использующей isassignablefrom, но хотел бы использовать менее интенсивный метод для второй части (то есть отражение с помощью invoke).
Мой вопрос:
Есть ли более эффективный способ сделать это, поскольку я прочитал, что использование команды invoke является дорогостоящим.