Отражение в приложении для Windows 8

Я модульное тестирование класса, внутри которого есть 2 частные переменные-члены. Я создал класс, который наследуется от класса, который я тестирую.

Сначала я просто сделал переменные, к которым хотел получить доступ, protected, но я подумал, что было бы здорово, если бы я мог сохранить их приватными и использовать отражение для доступа к ним. Я погуглил и нашел различные статьи (и вопросы, заданные здесь (http://stackoverflow.com/questions/4097682/c-sharp-use-reflection-to-get-a-private-member-variable-from-a-derived -класс)) и принятые ответы не сработали.

Связанный вопрос SO сказал:

// _commandCollection is an instance, private member
BindingFlags flags = BindingFlags.Instance | BindingFlags.NonPublic;

// Retrieve a FieldInfo instance corresponding to the field
FieldInfo field = GetType().GetField("_commandCollection", flags);

// Retrieve the value of the field, and cast as necessary
IDbCommand[] cc =(IDbCommand[])field.GetValue(this);

Однако GetField() метода нет. Я попробовал похожий метод, GetRuntimeField() но он не сработал.

Мой код (в наследующем классе):

public List<BaseData> RealAllData
{
    get
    {
        // Use reflection to access the private variable
        FieldInfo field = GetType().GetRuntimeField("mAllData");
        return (List<BaseData>)field.GetValue(this);
    }
}

Если кто-нибудь знает, почему это не работает, то я был бы признателен. Спасибо.


person Luke    schedule 15.10.2012    source источник
comment
Это та область, которая отражена в .NET Framework для приложений Магазина Windows Это все о, или это что-то другое?   -  person AakashM    schedule 15.10.2012
comment
Да, эти статьи помогли мне начать. Спасибо   -  person Luke    schedule 15.10.2012


Ответы (1)


Вы также можете поместить свой код отражения в переносимую библиотеку классов, предназначенную для приложений .NET 4 и Магазина Windows. После этого у вас будет доступ к «старому» API отражения, включая BindingFlags и т. д.

person Claire Novotny    schedule 24.10.2012