Подтвердить что ты не робот

Получить частные свойства/метод базового класса с отражением

С помощью 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();

Это будет печатать только "Bar", потому что "Foo" находится в базовом классе и private.

4b9b3361

Ответ 1

Чтобы получить все свойства (public + private/protected/internal, static + instance) заданного Type someType (возможно, используя GetType() для получения someType):

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

Ответ 2

Итерировать через базовые типы (type = type.BaseType), пока тип .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[] {});