Declaring a property in a derived class that matches the name of a property in the base class \"hides\" it (unless it overrides it with the override keyword).
GetProperties is defined as all public properties of the type.
You could get their get and set methods using:
typeof(C).GetMethods()
.Where(m => m.Name.StartsWith("set_") || m.Name.StartsWith("get_"))
Although this seems like a bad idea, compared to going down the inheritance hierarchy to get the properties.