可能重复:
How do I detect the "new" modifer on a field using reflection?
有以下声明
public class B : A
{
public new string Name;
}
如何确定该字段的FieldInfo
实例是否具有“新”修饰符?
答案 0 :(得分:10)
对于字段,不存在这样的字段; IL简直就是:
.field public string Name
等 - 因为没有虚拟字段或新闻节点的概念等。new
修饰符在这里为编译器存在纯粹,因为你断言你确认你正在做一些有点混乱的事情。在此处添加new
将禁止编译器警告(CS0108),但不会更改IL 。因此,您无法区分正式 new
d字段与不使用new
隐藏的字段。
但是,如果您将自己限制在具有公共访问者属性的私有字段中,那将更为可取。请注意,在任何一种情况下:基本类型中的字段仍然存在。
答案 1 :(得分:5)
我认为您需要在基类层次结构中搜索具有相同名称的成员,如果不是,那么它就是新的。
我知道这很难看,但根据对同一问题How do I detect the "new" modifer on a field using reflection?的其他答案的评论,它说:
我看了一下ILSpy的源代码,他们正在做同样的事情 - 走继承链。他们正在使用Mono.Cecil,但有 没有通过反射无法获得的特殊信息。更多 信息,请查看ILSpy的
AstBuilder.SetNewModifier
方法。
可能不是你所期待的,对不起。