简体   繁体   中英

Get private Properties/Method of base-class with reflection

With Type.GetProperties() you can retrieve all properties of your current class and the public properties of the base-class. Is it somehow possible to get the private properties of the base-class too?

Thanks

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

This will only print "Bar" because "Foo" is in the base-class and private.

To get all properties (public + private/protected/internal, static + instance) of a given Type someType (maybe using GetType() to get someType ):

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

Iterate through the base types (type = type.BaseType), until type.BaseType is 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[] {});

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM