2010-02-15 11 views
24

Con Type.GetProperties() è possibile recuperare tutte le proprietà della classe corrente e le proprietà public della classe base. È in qualche modo possibile ottenere anche le proprietà private della classe base?Ottieni proprietà private/Metodo di classe base con riflessione

Grazie

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(); 

questo stampa solo "Bar", perché "Foo" è nella classe base e privata.

risposta

41

Per ottenere tutte le proprietà (pubblico + privato/protetta/interno, statici + istanza) di un dato Type someType (magari usando GetType() per ottenere someType):

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

Inoltre, è possibile iterare attraverso i tipi di base (type = type.BaseType), finché type.BaseType è null, per ottenere un'immagine completa. –

+3

sfortunatamente questo non funziona per le proprietà private della classe base. solo per ereditato pubblico e protetto – Fabiano

+0

@Fabiano - non pubblico include privato. –

2

scorrere l'tipi di base (type = tipo .BaseType), finché type.BaseType è null.

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[] {}); 
Problemi correlati