C# Extension Method: PropertyInfo - GetDeclaraction

CSharp · Console

/Program.cs

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

// @nuget: Z.ExtensionMethods
using System;
using System.Reflection;
using System.Runtime.InteropServices;
					
public class Program
{
	public static void Main()
	{
        PropertyInfo PublicProperty = typeof(PropertyModel<int>).GetProperty("PublicProperty", BindingFlags.Static | BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic);
		PropertyInfo ProtectedInternalProperty = typeof(PropertyModel<int>).GetProperty("ProtectedInternalProperty", BindingFlags.Static | BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic);
		PropertyInfo AbstractProperty = typeof(PropertyModel<int>).GetProperty("AbstractProperty", BindingFlags.Static | BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic);

        //C# Extension Method: PropertyInfo - GetDeclaraction
        string PublicPropertyResult = PublicProperty.GetDeclaraction();
		string ProtectedInternalPropertyResult = ProtectedInternalProperty.GetDeclaraction();
		string AbstractPropertyResult = AbstractProperty.GetDeclaraction();
		
		Console.WriteLine(PublicPropertyResult);
		Console.WriteLine(ProtectedInternalPropertyResult);
		Console.WriteLine(AbstractPropertyResult);
	}

    public class PropertyModel<T> : AbstractPropertyModel
    {
        public static int StaticProperty { get; set; }
        public override int OverrideProperty { get; set; }
        public virtual int VirtualProperty { get; set; }
        internal int InternalProperty { get; set; }
        private int PrivateProperty { get; set; }
        protected int ProtectedProperty { get; set; }
        protected internal int ProtectedInternalProperty { get; set; }
        public int PublicProperty { get; set; }
        public int PublicGetterPrivateSetterProperty { get; private set; }
        public int PrivateGetterPublicSetterProperty { private get; set; }
        public T GenericProperty { get; set; }
        public T this[T param1, int param2] { get { return param1; }}
        public override int AbstractProperty { get; set; }
    }

    public abstract class AbstractPropertyModel
    {
        public abstract int AbstractProperty { get; set; }
        public virtual int OverrideProperty { get; set; }
    }
}
;