using System.Runtime.InteropServices;
public static void Main()
var properties = typeof(PropertyModel<int>).GetProperties();
foreach(var property in properties)
Console.WriteLine(property.GetDeclaraction());
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; }