Делаю расширение:
using System.Reflection;
...
public static T GetMethod<T>(this Type type, string name) where T : System.Delegate {
MethodInfo method = type.GetMethod(name);
return (T)Delegate.CreateDelegate(typeof(T),method);
}
Всё бы было нормально, если бы не условность
Что интересно, сами классы System.Delegate и System.MulticastDelegate не являются типами делегатов. Они являются основой для всех конкретных типов делегатов. Тот же процесс конструкции языка требует, что нельзя объявить класс, который является производным от Delegate или MulticastDelegate. Это запрещено правилами языка C#.
Подскажите, каким образом я могу решить поставленную задачу?
В общем, с помощью информации от Grundy сделал вот такую заглушку:
public static T GetMethod<T>(this Type type, string name) where T : class {
if (!typeof(T).IsSubclassOf(typeof(Delegate))) {
throw new InvalidOperationException(typeof(T).Name + " - не является делегатом!");
}
return Delegate.CreateDelegate(typeof(T),type.GetMethod(name)) as T;
}
Если появятся другие ответы, обязательно посмотрю.
На основе ответа от @MarcGravell
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Перешел на Windows 10Поставил Visual Studio 2017 года
Нужно перебрать коллекцию, и вытащить элемент, дата которого равна заданнойПишу LINQ запрос:
Недавно рыскал по object browser'у, и увидел такую картину