2012-10-15 25 views
5

में प्रतिबिंब मैं एक कक्षा का परीक्षण कर रहा हूं जिसमें इसके अंदर 2 निजी सदस्य चर हैं। मैंने एक कक्षा बनाई है जो कक्षा में विरासत में है जो मैं परीक्षण कर रहा हूं।विंडोज 8 ऐप

पहले मैंने केवल वेरिएबल्स बनाए जिन्हें मैं protected तक पहुंचना चाहता था, लेकिन मैंने सोचा कि यह अच्छा होगा अगर मैं उन्हें निजी रख सकूं और उन्हें एक्सेस करने के लिए प्रतिबिंब का उपयोग कर सकूं। मैंने गुगल किया और विभिन्न लेख पाए गए (& यहां पूछे गए प्रश्न (http://stackoverflow.com/questions/4097682/c-sharp-use-reflection-to-get-a-private-member-variable-from-a-derived -class)) और स्वीकृत उत्तर काम नहीं किया।

अतः जुड़ा हुआ सवाल ने कहा:

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

किसी को भी जानता है क्यों यह तो काम नहीं करता है मैं आभारी होंगे। धन्यवाद।

+3

क्या यह क्षेत्र है [विंडोज स्टोर ऐप्स के लिए .NET Framework में प्रतिबिंब] (http://msdn.microsoft.com/ en-us/library/hh535795.aspx) सब कुछ है, या यह कुछ अलग है? – AakashM

+0

हाँ, उन लेखों ने मुझे शुरू करने में मदद की। धन्यवाद – Luke

उत्तर

2

आप अपने प्रतिबिंब कोड को पोर्टेबल क्लास लाइब्रेरी में भी डाल सकते हैं जो .NET 4 और Windows Store ऐप्स को लक्षित करता है। इसके बाद आपको "पुराने" प्रतिबिंब एपीआई तक पहुंच होगी, जिसमें बाइंडिंगफ्लैग इत्यादि शामिल हैं।