When you use reflection to get properties, you can get just the subclass properties by using BindingFlags.DeclaredOnly (this causes it to exclude inherited properties). Here’s an example:
using System.Reflection;
var props = typeof(Driver).GetProperties(
BindingFlags.DeclaredOnly | BindingFlags.Public | BindingFlags.Instance);
foreach (var prop in props)
{
Console.WriteLine(prop.Name);
}
//Base class and subclass below
public abstract class PersonBase
{
public string FirstName { get; set; }
public string LastName { get; set; }
public int Id { get; set; }
}
public class Driver : PersonBase
{
public decimal MilesDriven { get; set; }
public bool CanDriveManual { get; set; }
}
Code language: C# (cs)
Note: Use GetType() if you have an object. Use typeof() if you have a class.
The code outputs just the subclass properties (from the Driver subclass):
MilesDriven
CanDriveManual
Code language: plaintext (plaintext)
Get base type properties
To get the base class properties, use BaseType to get the base class type, then get its properties. Here’s an example:
using System.Reflection;
var props = typeof(Driver).BaseType.GetProperties();
foreach (var prop in props)
{
Console.WriteLine(prop.Name);
}
//Base class and subclass below
public abstract class PersonBase
{
public string FirstName { get; set; }
public string LastName { get; set; }
public int Id { get; set; }
}
public class Driver : PersonBase
{
public decimal MilesDriven { get; set; }
public bool CanDriveManual { get; set; }
}
Code language: C# (cs)
This outputs just the inherited properties that come from the base class:
FirstName
LastName
Id
Code language: plaintext (plaintext)