2012-10-15 18 views
5

Jestem Unit Testowanie klasy, która ma 2 prywatne zmienne członkowskie wewnątrz niej. Stworzyłem klasę, która dziedziczy z klasy, którą testuję.Odbicie w aplikacji Windows 8 app

Najpierw stworzyłem zmienne, które chciałem uzyskać pod protected, ale pomyślałem, że byłoby fajnie, gdybym mógł zachować ich prywatność i użyć refleksji, aby uzyskać do nich dostęp. Przeszukałem go i znalazłem różne artykuły (& pytania zadawane tutaj (http://stackoverflow.com/questions/4097682/c-sharp-use-reflection-to-get-a-private-member-variable-from-a-derived -class)) i zaakceptowane odpowiedzi nie działały.

sobą związane pytanie powiedział

// _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); 

jednak nie GetField() metodą. Próbowałem metody, która wyglądała podobnie, GetRuntimeField(), ale to nie zadziałało.

Mój kod (w klasie dziedziczenie) wynosi:

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

Jeśli ktoś wie dlaczego to nie działa wtedy byłbym wdzięczny. Dzięki.

+3

Czy jest to obszar, który [Odbicie w .NET Framework dla aplikacji Windows Store] (http://msdn.microsoft.com/ en-us/library/hh535795.aspx) jest o wszystko, czy jest to coś innego? – AakashM

+0

Tak, te artykuły pomogły mi zacząć. Dzięki – Luke

Odpowiedz

2

Możesz również umieścić swój kod refleksji w bibliotece klas przenośnych, która jest przeznaczona dla aplikacji .NET 4 i Windows Store. Będziesz wtedy mieć dostęp do "starego" interfejsu API do odczytywania, w tym BindingFlags itp.

Powiązane problemy