Получить частные свойства/метод базового класса с отражением
С помощью 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.
Ответы
Ответ 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[] {});