2010-02-15 24 views
24

Type.GetProperties() के साथ बेस-क्लास के निजी गुण/विधि प्राप्त करें, आप अपनी वर्तमान कक्षा के सभी गुणों और बेस-क्लास के public गुणों को पुनर्प्राप्त कर सकते हैं। क्या बेस-क्लास के private गुणों को भी प्राप्त करना संभव है?प्रतिबिंब

धन्यवाद

class Base 
{ 
    private string Foo { get; set; } 
} 

class Sub : Base 
{ 
    private string Bar { get; set; } 
} 


     Sub s = new Sub(); 
     PropertyInfo[] pinfos = s.GetType().GetProperties(BindingFlags.NonPublic | BindingFlags.Public | BindingFlags.Instance | BindingFlags.Static); 
     foreach (PropertyInfo p in pinfos) 
     { 
      Console.WriteLine(p.Name); 
     } 
     Console.ReadKey(); 

यह केवल "बार" प्रिंट होगा क्योंकि "फू" आधार वर्ग और निजी में है। आधार प्रकार के माध्यम से

PropertyInfo[] props = someType.BaseType.GetProperties(
     BindingFlags.NonPublic | BindingFlags.Public 
     | BindingFlags.Instance | BindingFlags.Static) 

उत्तर

41

एक दिया Type someType (शायद GetType() का उपयोग कर someType प्राप्त करने के लिए) के सभी गुण (सार्वजनिक + निजी/संरक्षित/आंतरिक, स्थिर + उदाहरण) प्राप्त करने के लिए .BaseType), टाइप तक। बेसटाइप शून्य है।

MethodInfo mI = null; 
Type baseType = someObject.GetType(); 
while (mI == null) 
{ 
    mI = baseType.GetMethod("SomePrivateMethod", BindingFlags.NonPublic | BindingFlags.Instance); 
    baseType = baseType.BaseType; 
    if (baseType == null) break; 
} 
mI.Invoke(someObject, new object[] {}); 
+6

इसके अतिरिक्त, बेस प्रकार (प्रकार = प्रकार। बेसटाइप) के माध्यम से फिर से शुरू करना संभव है, टाइप तक। बेसटाइप पूरी तस्वीर पाने के लिए शून्य है। –

+3

दुर्भाग्य से यह बेस क्लास के निजी गुणों के लिए काम नहीं करता है। केवल विरासत में जनता के लिए और संरक्षित – Fabiano

+0

@ फ़ोबियानो - गैर-सार्वजनिक में निजी शामिल है। –