反映接口的所有属性,包括inheritance的属性?
我有一个表示接口的System.Type实例,我想获得该接口上所有属性的列表 – 包括从基接口inheritance的那些属性。 我基本上希望从类获得的接口中获得相同的行为。
例如,给定此层次结构:
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
BindingFlags.Instance | BindingFlags.Public | BindingFlags.FlattenHierarchy
BindingFlags.Instance | BindingFlags.Public | BindingFlags.FlattenHierarchy
到GetProperties,因为我对FlattenHierarchy的理解是它应该包含来自基类的成员,但行为完全相同。
我想我可以迭代Type.GetInterfaces()
并在每个上调用GetProperties,但后来我依赖于接口上的GetProperties 永远不会返回基本属性(因为如果它曾经做过,我会得到重复)。 我宁愿不依赖于这种行为而至少没有记录下来。
我怎么能:
- 获取接口上所有属性的列表,包括来自其基接口的属性? 要么
- 至少要确信我所看到的是我可以依赖的记录行为,所以我可以解决它吗?
可以在GetProperties(BindingFlags bindingFlags)
上的.NET framework 3.5版特定MSDN页面的注释中找到各种答案GetProperties(BindingFlags bindingFlags)
:
将BindingFlags.FlattenHierarchy传递给Type.GetXXX方法之一(例如Type.GetMembers),在查询接口类型本身时不会返回inheritance的接口成员。
[…]
要获取inheritance的成员,您需要查询其成员的每个已实现的接口。
示例代码也包括在内。 此评论由Microsoftie发布,所以我想说你可以相信它。
请参见此处: GetProperties()以返回接口inheritance层次结构的所有属性
我不认为有可能让所有成员不按照你的建议(即获得所有实现接口)。