2008-10-09 16 views
6

मेरे पास यह है:मैं कैसे बता सकता हूं कि किसी क्लास प्रॉपर्टी में सार्वजनिक सेट (.NET) है या नहीं?

public string Log 
     { 
      get { return log; } 
      protected set 
      { 
       if (log != value) 
       { 
        MarkModified(PropertyNames.Log, log); 
        log = value; 
       } 
      } 

     } 

और डाटाबेसिंग के लिए मेरी उपयोगिता वर्ग यह करता है:

PropertyInfo pi = ReflectionHelper.GetPropertyInfo(boundObjectType, sourceProperty); 

if (!pi.CanWrite) 
       SetReadOnlyCharacteristics(boundEditor); 

लेकिन PropertyInfo.CanWrite परवाह नहीं है कि सेट सार्वजनिक रूप से सुलभ है या नहीं, केवल यह मौजूद है।

मैं कैसे निर्धारित कर सकता हूं कि सार्वजनिक सेट है, न कि किसी भी सेट?

उत्तर

1

अन्य उत्तरों में प्रतिबिंब हेल्पर में सुझाए गए परिवर्तनों का एक विकल्प pi.GetSetMethod(false) पर कॉल करना है और देखें कि परिणाम शून्य है या नहीं।

2

आपको BindingFlags का उपयोग करने की आवश्यकता है। जैसे

PropertyInfo property = type.GetProperty("MyProperty", BindingFlags.Public | BindingFlags.SetProperty | BindingFlags.Instance); 
0

अपने ReflectionHelper.GetPropertyInfo अंदर कुछ(), शायद एक boundObjectType.GetType()। GetProperties(), जहां BindingFlags पैरामीटर जाहिरा तौर पर BindingFlags.NonPublic शामिल करने के लिए आप। आप बस BindingFlags.Public

+0

यह काम नहीं करेगा, संपत्ति सार्वजनिक हो सकती है, जबकि इसका "सेट" निजी या आंतरिक हो सकता है। –

1

PropertyInfo पर GetSetMethod पर कॉल करें, MethodInfo प्राप्त करें और इसकी संपत्तियों की जांच करें, जैसे IsPublic।

0

वैसे यह कहना मुश्किल है क्योंकि आपके पास "प्रतिबिंब हेल्पर" वर्ग है जहां हम स्रोत नहीं देख सकते हैं। हालांकि, मेरा पहला अनुमान यह है कि जब आप Type.GetProperty को कॉल करते हैं तो आप बाइंडिंगफ्लैग विशेषता को ठीक से सेट नहीं कर रहे हैं। यह सुनिश्चित करने के लिए कि केवल सार्वजनिक मूल्य लौटाए गए हैं, आपको सार्वजनिक गणना ध्वज की आवश्यकता है।

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

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