2012-10-15 11 views
5

I'm Unit Test di una classe che contiene al suo interno 2 variabili membro private. Ho creato una classe che eredita dalla classe che sto testando.Reflection in un'app di Windows 8

All'inizio ho appena creato le variabili che volevo accedere a protected ma ho pensato che sarebbe stato bello se potessi tenerle private e utilizzare il reflection per accedervi. Ho cercato su Google e ho trovato vari articoli (& domande poste qui (http://stackoverflow.com/questions/4097682/c-sharp-use-reflection-to-get-a-private-member-variable-from-a-ivedived -class)) e le risposte accettate non hanno funzionato.

La questione legata SO detto:

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

Tuttavia, non esiste un metodo GetField(). Ho provato un metodo che sembrava simile, GetRuntimeField() ma non ha funzionato.

Il mio codice (nella classe eredita) è:

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

Se qualcuno sa il motivo per cui questo non funziona, allora sarei grato. Grazie.

+3

È questa l'area [Reflection in .NET Framework per le app di Windows Store] (http://msdn.microsoft.com/ en-us/library/hh535795.aspx) è tutto o qualcosa di diverso? – AakashM

+0

Sì, gli articoli mi hanno aiutato a iniziare. Grazie – Luke

risposta

2

È anche possibile inserire il codice di riflessione in una libreria di classi portatile destinata alle app .NET 4 e Windows Store. Avrai quindi accesso alla "vecchia" API di riflessione, inclusi BindingFlags, ecc.