如何使用反射检测场上的"new"修饰符?



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);
    }
}

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

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

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

这里new的唯一作用是抑制编译器警告。

我的猜测是,它不会在生成的IL中留下任何痕迹。

反问:你为什么感兴趣?只是好奇还是你有实际的场景?

相关内容

  • 没有找到相关文章

最新更新