I have an instance of System.Type that represents an interface, and I want to get a list of all the properties on that interface -- including those inherited from base interfaces. I basically want the same behavior from interfaces that I get for classes.
For example, given this hierarchy:
public interface IBase {
public string BaseProperty { get; }
}
public interface ISub : IBase {
public string SubProperty { get; }
}
public class Base : IBase {
public string BaseProperty { get { return "Base"; } }
}
public class Sub : Base, ISub {
public string SubProperty { get { return "Sub"; } }
}
If I call GetProperties on the class -- typeof(Sub).GetProperties()
-- then I get both BaseProperty and SubProperty. I want to do the same thing with the interface, but when I try it -- typeof(ISub).GetProperties()
-- all that comes back is SubProperty.
I tried passing BindingFlags.Instance | BindingFlags.Public | BindingFlags.FlattenHierarchy
to GetProperties, since my understanding of FlattenHierarchy is that it's supposed to include members from base classes, but the behavior was exactly the same.
I suppose I could iterate Type.GetInterfaces()
and call GetProperties on each one, but then I would be relying on GetProperties on an interface to never return base properties (since if it ever did, I'd get duplicates). I'd rather not rely on this behavior without at least seeing it documented.
How can I either:
- Get a list of all the properties on an interface, including those from its base interfaces? Or
- At least be confident that what I'm seeing is documented behavior that I can rely on, so I can work around it?