сабж. Нужно вернуть все филды, в том числе private-field-ы базового класса. Вроде BindingFlags перебрал все что можно, но как-то не получается.
Здравствуйте, Аноним, Вы писали:
А> сабж. Нужно вернуть все филды, в том числе private-field-ы базового класса. Вроде BindingFlags перебрал все что можно, но как-то не получается.
Метод GetField не возвращает приватные поля, унаследованные классом от его базовых классов. Получить все поля указанного класса можно, вручную пробежавшись по иерархии:
using System;
using System.Collections.Generic;
using System.Reflection;
class ReflectionUtils
{
public static FieldInfo[] GetFields(Type type)
{
if(type == null)
{
throw new ArgumentNullException("type");
}
List<FieldInfo> fields = new List<FieldInfo>();
Type currentType = type;
do
{
fields.AddRange(
currentType.GetFields(
BindingFlags.Public | BindingFlags.NonPublic |
BindingFlags.Instance | BindingFlags.Static |
BindingFlags.DeclaredOnly));
currentType = currentType.BaseType;
}
while (currentType != null);
return fields.ToArray();
}
}