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