2012-10-15 20 views
5

Ben Ünite İçinde 2 özel üye değişkeni olan bir sınıfı test ediyorum. Test ettiğim sınıftan miras kalan bir sınıf oluşturdum.Bir Windows 8 uygulamasında yansıma

İlk başta sadece protected numarasına erişmek istediğim değişkenleri yaptım, ancak onları özel tutabilseydim ve onlara erişmek için yansıma kullanabilsem iyi olacağını düşündüm. Ben Googled ve çeşitli makaleler (& sorular burada sordu (http://stackoverflow.com/questions/4097682/c-sharp-use-reflection-to-get-a-private-member-variable-from-a-derived -sınıf) ve kabul edilen cevaplar işe yaramadı.

SO bağlı soru

bahsedilen:

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

Ancak, GetField() bir yöntem yoktur. Benzere benzeyen bir yöntem denedim, GetRuntimeField() ama bu işe yaramadı. (Devralmasını sınıfta)

Benim kodudur:

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

herkes bu işe yaramazsa neden minnettar olacaktır biliyorsa. Teşekkürler.

+3

Bu, [Windows Mağaza Uygulamaları için .NET Framework'teki Yansıma] alanıdır (http://msdn.microsoft.com/ en-us/library/hh535795.aspx) hepsi ya da farklı bir şey mi? – AakashM

+0

Evet, bu makaleler başlamama yardımcı oldu. Teşekkürler – Luke

cevap

2

Yansıma kodunuzu, .NET 4 ve Windows Mağaza uygulamalarını hedefleyen bir Taşınabilir Sınıf Kitaplığı'na da ekleyebilirsiniz. Daha sonra BindingFlags, vb. Dahil olmak üzere "eski" yansıma API'sine erişirsiniz.

İlgili konular