Объявление делегата - это объявление типа, как struct
и class
. Так что вы можете использовать
typeof(MyFunc)
Чтобы найти тип и аргументы делегата, вы должны посмотреть на метод Invoke
типа делегата:
MethodInfo invokeMethod = typeof(MyFunc).GetMethod("Invoke");
Type returnType = invokeMethod.ReturnType;
ParameterInfo[] parameterInfos = invokeMethod.GetParameters();
Делегат - это в значительной степени класс с некоторыми обычными методами, такими как Invoke
. Когда вы используете экземпляр делегата, как это
func(args)
Это внутренне переведено на
func.Invoke(args)
Именно поэтому в пространстве имен отражения нет специального типа DelegateInfo : метод Invoke
MethodInfo сообщает вам все, что вам нужно.
Теперь, если вы хотите динамически вызывать экземпляр делегата, вы можете либо использовать рефлексию и вызвать Invoke
в своем MethodInfo , либо убедиться, что ваша переменная делегата имеет тип Delegate , который дает вам доступ к методу DynamicInvoke
:
Delegate func = ...;
object result = func.DynamicInvoke(arg1, arg2);