मैं सी # में प्रतिबिंब पर एक पूर्ण नौसिखिया हूं। मैं विरासत में शामिल सभी सहित, एक वर्ग में सभी निजी क्षेत्रों तक पहुंचने के लिए प्रतिबिंब का उपयोग करना चाहता हूं।सी #: प्रतिबिंब के माध्यम से विरासत निजी इंस्टेंस सदस्यों तक पहुंच
मैं विरासत में रहने वाले सभी निजी क्षेत्रों तक पहुंचने में सफल रहा हूं, साथ ही साथ सभी सार्वजनिक और संरक्षित विरासत वाले क्षेत्र भी शामिल हैं। हालांकि, मैं निजी, विरासत वाले क्षेत्रों तक पहुंचने में सक्षम नहीं हूं। निम्नलिखित उदाहरण दिखाता है:
class A
{
private string a;
public string c;
protected string d;
}
class B : A
{
private string b;
}
class test
{
public static void Main(string[] Args)
{
B b = new B();
Type t;
t = b.GetType();
FieldInfo[] fields = t.GetFields(BindingFlags.Public | BindingFlags.NonPublic
| BindingFlags.Instance);
foreach(FieldInfo fi in fields){
Console.WriteLine(fi.Name);
}
Console.ReadLine();
}
}
यह फ़ील्ड बीए खोजने में विफल रहता है।
क्या यह भी पूरा करना संभव है? स्पष्ट समाधान निजी, विरासत वाले क्षेत्रों को संरक्षित क्षेत्रों में परिवर्तित करना होगा। हालांकि, इस समय, मेरे नियंत्रण से बाहर है।
विरासत वाले क्षेत्रों को अनदेखा करने के लिए "अगर" खंड के बजाय, आप केवल बाइंडिंगफ्लैग निर्दिष्ट कर सकते हैं। केवल घोषित किया गया है। – Timwi
किसी प्रकार पर बेसटाइप का उपयोग करके बाहर, क्या हम अभी भी बेस क्लास निजी सदस्य तक पहुंच सकते हैं। नहीं, यह मेरे लिए किसी भी वास्तविक दुनिया की समस्या को हल नहीं कर रहा है, लेकिन मैं सिर्फ उत्सुक हूं क्योंकि टाइप क्लास की बेसटाइप संपत्ति का उपयोग करके मुझे विश्वास है कि (इसे लिखते समय) मैं चाइल्ड बेस क्लास सदस्यों तक पहुंच रहा हूं, इसलिए क्या इसका उपयोग करने के साथ कोई और तरीका है बेसटाइप संपत्ति को प्राप्त करने के लिए? – Zenwalker