如何通过反射确定字段是否具有'new'修饰符?



可能重复:
我如何检测";新的";使用反射对场进行修改?

具有以下声明

public class B : A
{
    public new string Name;
}

如何确定字段的FieldInfo实例是否具有"new"修饰符?

对于字段,不存在这样的字段;IL很简单:

.field public string Name

etc-因为没有虚拟字段或newslot等的概念。这里的new修饰符存在于编译器的中,让你断言你承认你在做一些有点令人困惑的事情。在此处添加new将抑制编译器警告(CS0108(,但不会更改IL。因此,您无法区分正式newd字段与未使用new而隐藏的字段。

不过,如果您将自己限制为具有公共访问器属性的私有字段,则会更可取。请注意,在任何一种情况下:基本类型中的字段仍然存在

我认为您需要在基类层次结构中搜索具有相同名称的成员,如果不是,则它是新的。

我知道它很丑陋,但根据对同一问题的另一个答案的评论,我如何检测";新的";使用反射对场进行修改?,上面写着:

我看了ILSpy的源代码,他们也在做同样的事情-在继承链上行走。他们在用Mono。Cecil,但有没有通过反射无法获得的特殊信息。了解更多信息请参阅ILSpy的AstBuilder.SetNewModifier方法。

可能不是你所期望的,很抱歉。

相关内容

  • 没有找到相关文章

最新更新