Делаю расширение:
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
Апостиль в Лос-Анджелесе без лишних нервов и бумажной волокиты
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости