C# Extension Method: ParameterInfo - GetDeclaraction

CSharp · Console

/Program.cs

// C# Extension Method
// Doc: https://csharp-extension.com/en/method/1002704/parameterinfo-getdeclaraction

// @nuget: Z.ExtensionMethods
using System;
using System.Reflection;
using System.Runtime.InteropServices;
					
public class Program
{
	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)
        {
			//C# Extension Method: ParameterInfo - GetDeclaraction
            Console.WriteLine(p.GetDeclaraction());
        }
    }

	
    public class MethodModel<T> : AbstractMethodModel
    {
        public class Toto<T2> {}
        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)
        {
            i = 1;
            return 1;
        }
        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)
        {
            i = 1;
            return 1;
        }

        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)
    {
        return 1;
    }
}
;