Re: Как рефлекшеном GetField-ом вернуть все филд базового кл
От: nikov США http://www.linkedin.com/in/nikov
Дата: 06.12.07 14:58
Оценка:
Здравствуйте, Аноним, Вы писали:

А> сабж. Нужно вернуть все филды, в том числе 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();
    }
}
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.