2013-03-31 7 views
18
class Bla 
{ 
    public readonly int sum; 
} 

FieldInfo f = type.GetField("sum"); 
f.?? // what? 

मुझे कैसे पता चलेगा कि sum पढ़ा गया है या नहीं? गुणों के लिए मैं PropertyInfo.CanWrite कर सकता हूं यह जानने के लिए कि सदस्य के पास लेखन पहुंच है या नहीं।कैसे एक सदस्य चर पढ़ने के लिए है?

उत्तर

29

readonly मतलब यह है कि क्षेत्र काम केवल क्षेत्र घोषणा के पास या एक निर्माता के अंदर हो सकता है। तो तुम एक FieldInfo पर IsInitOnly संपत्ति है, जो

यह बताते हैं कि क्षेत्र में केवल निर्माता

अधिक जानकारी IsInitOnly MSDN article

FieldInfo f = typeof(Bla).GetField("sum"); 
Console.WriteLine(f.IsInitOnly); //return true 
पर हैं के मुख्य भाग में स्थापित किया जा सकता एक मूल्य हो जाता है का उपयोग कर सकते

नोट: आप भी अगर क्षेत्र समय निरंतर संकलित किया गया है परीक्षण करने के लिए IsLiteral संपत्ति का उपयोग कर सकते हैं। यह readonly क्षेत्र के लिए अवास्तविक लौटाते हैं, लेकिन क्षेत्र के लिए सच है, const के साथ चिह्नित।

एक और नोट: प्रतिबिंब आपको readonly और private फ़ील्ड में लिखने से नहीं रोकता है (यह public readonly के लिए भी सच है, लेकिन मैं एक और प्रतिबंधित केस दिखाना चाहता हूं)। तो अगली कोड उदाहरण मान्य होते हैं और किसी भी अपवाद फेंक नहीं होगा:

class Bla 
{ 
    //note field is private now 
    private readonly int sum = 0; 
} 

अब आप क्षेत्र हो और (मैं BindingFlags का उपयोग निजी गैर स्थिर क्षेत्रों पाने के लिए यह करने के लिए एक मूल्य के बारे में है, क्योंकि GetField जीता ' निजी क्षेत्रों के लिए टी वापसी FieldInfo डिफ़ॉल्ट रूप से)

FieldInfo field = typeof(Bla).GetField("sum", BindingFlags.NonPublic | 
               BindingFlags.Instance); 

var bla = new Bla(); 
field.SetValue(bla, 42); 

Console.WriteLine(field.GetValue(bla)); //prints 42 

सभी ठीक काम करता है। यह केवल एक अपवाद फेंक देगा यदि कोई फ़ील्ड const है।

+0

किसी भी विचार क्या 'NonPublic' झंडा यहाँ क्या कर रहा है को शामिल करना चाहिए? – nawfal

+0

@nawfal 'GetField' डिफ़ॉल्ट रूप से निजी फ़ील्ड वापस नहीं करेगा। आपको इसे स्पष्ट रूप से –

+0

@ ओह हां सेट करने की आवश्यकता है। मैंने 'निजी 'के बारे में आपका उदाहरण नहीं देखा था। धन्यवाद – nawfal

संबंधित मुद्दे