如何使用反射检测场上的"新"修改器?

Sim*_*mon 5 .net reflection

http://msdn.microsoft.com/en-us/library/435f1dw2.aspx

public class Base
{
    public string Field;
}
public class Child : Base
{
    public new string Field;
}

[TestFixture]
public class TestClass
{

    [Test]
    public void DetectNew()
    {
        var fieldInfo = typeof(Child).GetField("Field");
        //How do I tell fieldInfo has a new modifier?
        Debug.WriteLine(fieldInfo);
    }
}
Run Code Online (Sandbox Code Playgroud)

编辑:我知道方法和属性我可以检查"MethodBase.IsHideBySig".为什么FieldInfo不存在类似的属性?

Jor*_*dão 2

只是猜测,但我认为您必须在基类中搜索具有相同名称的成员。

您还可以查看这两个字段生成的 IL,看看是否存在可以通过反射使用的任何差异。

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