У меня есть экземпляр System.Type, представляющий интерфейс, и я хочу получить список всех свойств этого интерфейса, включая свойства, унаследованные от базовых интерфейсов. Я в основном хочу того же поведения от интерфейсов, которые я получаю для классов.
Например, с учетом этой иерархии:
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"; } }
}
Если я вызываю GetProperties для класса - typeof(Sub).GetProperties()
- тогда я получаю и BaseProperty, и SubProperty. Я хочу сделать то же самое с интерфейсом, но когда я пытаюсь это сделать - typeof(ISub).GetProperties()
- все, что возвращается, это SubProperty.
Я попытался передать BindingFlags.Instance | BindingFlags.Public | BindingFlags.FlattenHierarchy
в GetProperties, так как я понимаю, что FlattenHierarchy заключается в том, что он должен включать члены из базовых классов, но поведение было точно таким же.
Полагаю, я мог бы выполнить итерацию Type.GetInterfaces()
и вызывать GetProperties для каждого из них, но тогда я бы полагался на GetProperties на интерфейсе, который никогда не возвращал бы базовые свойства (поскольку, если бы он это сделал получить дубликаты). Я бы предпочел не полагаться на это поведение, по крайней мере, не увидев его документально.
Как я могу:
- Получить список всех свойств интерфейса, включая свойства его базовых интерфейсов? Или
- По крайней мере, быть уверенным, что то, что я вижу, - это документированное поведение, на которое я могу положиться, чтобы я мог обойти это?