我有一个表示接口的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(因为如果有的话,我会得到重复的)。我宁愿不依赖于这种行为而至少没有记录下来。
我怎么能:
答案 0 :(得分:7)
可以在注释中找到各种答案the .NET framework version 3.5-specific MSDN page on GetProperties(BindingFlags bindingFlags)
:
传递BindingFlags.FlattenHierarchy 到其中一个Type.GetXXX方法, 比如Type.GetMembers,不会 返回继承的接口成员 当你在界面上查询时 打字本身。
[...]
要获得继承的成员,您需要 查询每个实现的接口 为其成员。
还包括示例代码。此评论由Microsoftie发布,所以我想说你可以相信它。
答案 1 :(得分:1)
见这里:GetProperties() to return all properties for an interface inheritance hierarchy
我认为没有按照你的建议(即获得所有实现接口)来获取所有成员是不可能的。)