如何通过反射确定某个字段是否有"新"修饰符?

Use*_*rol 10 c# reflection

可能重复:
如何使用反射检测字段上的"新"修改器?

有以下声明

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.

但是,如果您将自己局限于具有公共访问者属性的私有字段,那将是更可取的.请注意,在任何一种情况下:基本类型中的字段仍然存在.


Mel*_*igy 5

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

我知道它很难看,但根据对同一问题的其他答案的评论如何使用反射检测场上的"新"修饰符?, 它说:

我看了一下ILSpy的源代码,他们正在做同样的事情 - 走继承链.他们正在使用Mono.Cecil,但没有通过反射无法获得的特殊信息.有关更多信息,请查看ILSpy的AstBuilder.SetNewModifier方法.

可能不是你所期待的,对不起.