using System.Runtime.InteropServices;
public static void Main()
var methods = typeof(MethodModel<int>).GetMethods();
foreach(var method in methods)
Console.WriteLine(method.GetDeclaraction());
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)