CSharp · Console
// 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; }
}
}