<[EMAIL PROTECTED]> writes:
>
> Delegates are stored in assemble as Types and can be
> retrieved by calling Module.GetTypes().
> It can be distinguished from other types because it is subclass
> of System.Delegate.
>
> But how to obtain information about the shape of the delegate:
> what is return type and what are parameters types?
>
Hi,
hopefully the attached code snippet will help answer your Q.
--sigbjorn
http://galois.com/~sof/hugs98.net/
//
// throw-away delegate dumper -- sof 4/02.
//
using System;
using System.Reflection;
public class App {
public static MethodInfo GetDelegateMemberInfo (System.Type t,
System.String delName) {
/* With the help of ildasm (and Richter Ch. 17), a C# 'delegate'
* decl is compiled into a nested class containing an Invoke()
* method (amongst other things.)
*/
Type[] ns = t.GetNestedTypes();
Type delTy = Type.GetType("System.Delegate");
foreach (Type n in ns) {
if (n.IsSubclassOf(delTy) && n.Name == delName) {
try {
return n.GetMethod("Invoke");
} catch {
continue;
}
}
}
return null;
}
// example delegate
public delegate void Foo(int x, int y, bool z);
public static void Main() {
MethodInfo m = GetDelegateMemberInfo(Type.GetType("App"), "Foo");
if (m != null) {
Console.Write("{0} Foo(", m.ReturnType);
ParameterInfo[] ps = m.GetParameters();
int idx = 0;
while (idx < ps.Length) {
Console.Write("{0}", ps[idx].ParameterType);
Console.Write(((idx+1) < ps.Length) ? "," : ")");
idx++;
}
Console.WriteLine("");
}
}
};