Как я могу обнаружить «новый» модификатор на поле, используя отражение? - PullRequest
5 голосов
/ 09 июля 2011

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 не существует аналогичного свойства?

Ответы [ 2 ]

2 голосов
/ 09 июля 2011

Просто предположение, но я думаю, что вам придется искать в базовом классе (ах) член с тем же именем.

Вы также можете взглянуть на сгенерированный IL для обоих полей, чтобы увидеть, есть ли какие-либо различия, которые вы можете использовать с помощью отражения.

1 голос
/ 09 июля 2011

Единственный эффект new здесь - подавление предупреждения компилятора.

Я думаю, что он не оставляет следов в сгенерированном IL.

Встречный вопрос: почему вы заинтересованы? Просто любопытно или у вас есть практический сценарий?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...