可能重复:
如何使用反射检测字段上的"新"修改器?
有以下声明
public class B : A
{
public new string Name;
}
Run Code Online (Sandbox Code Playgroud)
如何确定该字段的FieldInfo实例是否具有"新"修饰符?
Mar*_*ell 10
对于田地,没有这样的存在; IL简单地说:
.field public string Name
Run Code Online (Sandbox Code Playgroud)
等等 - 因为没有虚拟字段或新闻节点的概念等.new这里的修饰符纯粹是为编译器而存在,因为你断言你承认你做的事情有点令人困惑.添加new此处将禁止编译器警告(CS0108),但不会更改IL.因此,您无法区分正式的 new d字段与已隐藏的字段new.
但是,如果您将自己局限于具有公共访问者属性的私有字段,那将是更可取的.请注意,在任何一种情况下:基本类型中的字段仍然存在.
我认为您需要搜索具有相同名称的成员的基类层次结构,如果不是,则它是新的.
我知道它很难看,但根据对同一问题的其他答案的评论如何使用反射检测场上的"新"修饰符?, 它说:
我看了一下ILSpy的源代码,他们正在做同样的事情 - 走继承链.他们正在使用Mono.Cecil,但没有通过反射无法获得的特殊信息.有关更多信息,请查看ILSpy的
AstBuilder.SetNewModifier方法.
可能不是你所期待的,对不起.
| 归档时间: |
|
| 查看次数: |
460 次 |
| 最近记录: |