Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Упорядоченная рефлексия полей

842
27 сентября 2009 года
sigmov
301 / / 16.09.2008
Всем здравствуйте.

Передо мной стоит задача рефлексии полей структуры\клсса:

В принципе получить поля класса несложно:
 
Код:
for each (FieldInfo^ e in G::typeid->GetFields(BindingFlags::Instance | BindingFlags::Public | BindingFlags::NonPublic))
{
    ...
}


Но проблема в том, что необходимо еще и следующее:
1) Для [LayoutKind.Explicit] необходимо определить смещение каждого поля (но это можно сделать через значение атрибута смещения, для каждого поля)
2) Для прочих определить № позиции каждого поля в классе\структуре - и вот тут у меня проблема, к сожалению приведенный выше код не всегда достает поля упорядоченно!

Надеюсь на вашу помощь...
5
27 сентября 2009 года
hardcase
4.5K / / 09.08.2005
Если Layout-атрибут не навешен на структуру, то, строго говоря, CLR имеет право расположить поля объекта как ей вздумается (выровняет по 4 или 8 байтов, думаю).
842
27 сентября 2009 года
sigmov
301 / / 16.09.2008
Цитата: hardcase
Если Layout-атрибут не навешен на структуру, то, строго говоря, CLR имеет право расположить поля объекта как ей вздумается (выровняет по 4 или 8 байтов, думаю).



Да. Но вот как определить позицию каждого из полей(а еще лучше - смещение)?

5
27 сентября 2009 года
hardcase
4.5K / / 09.08.2005
Цитата: sigmov
Да. Но вот как определить позицию каждого из полей(а еще лучше - смещение)?


Думаю надо копать в сторону CLR-хостинг API.
А вообще, зачем такое потребовалось? Какая-то извращенная сериализация?

842
27 сентября 2009 года
sigmov
301 / / 16.09.2008
Цитата: hardcase
Думаю надо копать в сторону CLR-хостинг API.
А вообще, зачем такое потребовалось? Какая-то извращенная сериализация?



Нет. Препод-извращенец. :D

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог