2012-10-15 39 views
5

Tôi là đơn vị Kiểm tra một lớp có 2 biến thành viên riêng bên trong nó. Tôi đã tạo một lớp kế thừa từ lớp tôi đang thử nghiệm.Phản ánh trong ứng dụng Windows 8

Lúc đầu, tôi chỉ thực hiện các biến mà tôi muốn truy cập protected nhưng tôi nghĩ sẽ rất tuyệt nếu tôi có thể giữ riêng tư và sử dụng phản chiếu để truy cập chúng. Tôi đã tìm kiếm và tìm thấy nhiều bài viết khác nhau (& câu hỏi được yêu cầu tại đây (http://stackoverflow.com/questions/4097682/c-sharp-use-reflection-to-get-a-private-member-variable-from-a-derived -class)) và các câu trả lời được chấp nhận không hoạt động.

Các liên kết SO câu hỏi nói:

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

Tuy nhiên, không có phương pháp GetField(). Tôi đã thử một phương pháp tương tự, GetRuntimeField() nhưng phương pháp đó không hoạt động.

Mã của tôi (trong lớp kế thừa) là:

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

Nếu có ai biết tại sao điều này không làm việc thì tôi sẽ biết ơn. Cảm ơn.

+3

Đây có phải là khu vực [Phản ánh trong Khuôn khổ .NET dành cho Ứng dụng Windows Store] (http://msdn.microsoft.com/) en-us/library/hh535795.aspx) là tất cả về, hoặc là một cái gì đó khác nhau? – AakashM

+0

Vâng, các bài viết đó đã giúp tôi bắt đầu. Cảm ơn – Luke

Trả lời

2

Bạn cũng có thể đặt mã phản chiếu của mình vào Thư viện lớp học di động nhắm mục tiêu ứng dụng .NET 4 và Windows Store. Sau đó, bạn sẽ có quyền truy cập vào API phản chiếu "cũ", bao gồm BindingFlags, v.v.

Các vấn đề liên quan