using System.Runtime.InteropServices;
public static void Main()
MethodInfo GenericMethod = typeof(MethodModel<int>).GetMethod("GenericMethod", BindingFlags.Static | BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic);
MethodInfo OutParameterMethod = typeof(MethodModel<int>).GetMethod("OutParameterMethod", BindingFlags.Static | BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic);
MethodInfo ParamsParameterMethod = typeof(MethodModel<int>).GetMethod("ParamsParameterMethod", BindingFlags.Static | BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic);
Type t = typeof(MethodModel<int>);
MethodInfo[] minfo = t.GetMethods();
DisplayParametersInfo(GenericMethod.GetParameters());
DisplayParametersInfo(OutParameterMethod.GetParameters());
DisplayParametersInfo(ParamsParameterMethod.GetParameters());
private static void DisplayParametersInfo(ParameterInfo[] parameterInfo)
foreach (ParameterInfo p in parameterInfo)
Console.WriteLine(p.GetSignature());
public class MethodModel<T> : AbstractMethodModel
public static int StaticMethod() { return 1; }
public override int OverrideMethod() { return 1; }
public virtual int VirtualMethod() { return 1; }
public int PublicMethod() { return 1; }
private int PrivateMethod() { return 1; }
internal int InternalMethod() { return 1; }
protected int ProtectedMethod() { return 1; }
protected internal int ProtectedInternalMethod() { return 1; }
public int OutParameterMethod(out int i)
public int RefParameterMethod(ref int i) { return 1; }
public int ParamsParameterMethod(params int[] i) { return 1; }
public int OptionalParameterMethod(int i = 1) { return 1; }
public int InParameterModifierMethod([In] int i) { return 1; }
public int OutParameterModifierMethod([Out] int i)
public int OptionalParameterModifierMethod([Optional] int i) { return 1; }
public T GenericTypeMethod(T i) { return i; }
public T1 GenericMethod<T1, T2>(T1 i, T2 i2) { return i; }
public override int AbstractMethod() { throw new NotImplementedException(); }
public abstract class AbstractMethodModel
public abstract int AbstractMethod();
public abstract int OverrideMethod();
public static class ExtensionMethodModel
public static int ExtensionParameterMethod(this int i)