This will give you a list of properties:
PropertyInfo[] propsB = typeof(b).GetProperties(BindingFlags.Public | BindingFlags.Instance);
PropertyInfo[] propsC = typeof(c).GetProperties(BindingFlags.Public | BindingFlags.Instance);
Then to put them into a list...
List<string> propNames = new List<string>();
foreach (PropertyInfo p in propsB)
{
propNames.Add("b." + p.Name);
}
foreach (PropertyInfo p in propsC)
{
propNames.Add("c." + p.Name);
}
And there you have it, a list called propNames with all the public instance properties of class b and class c.
[Edit]
If you want to create a dynamic object from the properties, that's something much more difficult and requires using the framework Emit functions and low level MSIL.
What is the ultimate goal here? Are you trying to create a dynamic object based on static code? Why would you want to create an object with the properties of the two other classes if the classes are well known?