public string A { get; set; }
public bool B { get; set; }
public virtual string C { get; set; }
public class Class2 : Class1
public new bool? B { get; set; }
public override string C {get; set;}
public static void Main()
var x = typeof(Class2).GetProperties(BindingFlags.Instance | BindingFlags.Public);
select g.OrderByDescending(t => t.DeclaringType == typeof(Class2)).First();
foreach (var a in props) {
Console.WriteLine("{0} from {1}", a.Name, a.DeclaringType.Name);