pba*_*aga 5 c# reflection properties
我们假设有一个带有虚拟属性的类(我们称之为'P').它在派生类中被覆盖.现在我想使用这样的东西:
obj.GetType().GetProperty("P")获取有关覆盖属性的信息.此搜索是不明确的,因为有两个"P"属性(基础和覆盖).所以我键入:obj.GetType().GetProperty("P", BindingFlags.DeclaredOnly |
BindingFlags.Public | BindingFlags.Instance)
它只返回覆盖的"P",但如果在编译时我无法猜测是否有覆盖呢?后一个调用将返回null.如果继承的层次结构更大,那么情况就更复杂了.
换句话说,我希望获得"最顶层"覆盖,否则 - 基本属性.实现目标的最简洁方法是什么?目前我只知道一个是查看所有属性并检查名称和声明类型.
基本上,我同意马丁的观点:BindingFlags.FlattenHierarchy可能就是你所需要的。但是,我认为这些应该用来代替,BindingFlags.DeclaredOnly即
Type type = obj.GetType();
var c = type.GetProperty("P", BindingFlags.FlattenHierarchy |
BindingFlags.Public |
BindingFlags.Instance);
Run Code Online (Sandbox Code Playgroud)
然后,您可以使用c.DeclaringType来查明该属性是在哪个级别声明的。
如果您指定DeclaredOnly并且 Typetype没有声明(而是继承)P,null将被返回。
| 归档时间: |
|
| 查看次数: |
1954 次 |
| 最近记录: |