Упорядоченная рефлексия полей
Передо мной стоит задача рефлексии полей структуры\клсса:
В принципе получить поля класса несложно:
Код:
for each (FieldInfo^ e in G::typeid->GetFields(BindingFlags::Instance | BindingFlags::Public | BindingFlags::NonPublic))
{
...
}
{
...
}
Но проблема в том, что необходимо еще и следующее:
1) Для [LayoutKind.Explicit] необходимо определить смещение каждого поля (но это можно сделать через значение атрибута смещения, для каждого поля)
2) Для прочих определить № позиции каждого поля в классе\структуре - и вот тут у меня проблема, к сожалению приведенный выше код не всегда достает поля упорядоченно!
Надеюсь на вашу помощь...
Если Layout-атрибут не навешен на структуру, то, строго говоря, CLR имеет право расположить поля объекта как ей вздумается (выровняет по 4 или 8 байтов, думаю).
Цитата: hardcase
Если Layout-атрибут не навешен на структуру, то, строго говоря, CLR имеет право расположить поля объекта как ей вздумается (выровняет по 4 или 8 байтов, думаю).
Да. Но вот как определить позицию каждого из полей(а еще лучше - смещение)?
Цитата: sigmov
Да. Но вот как определить позицию каждого из полей(а еще лучше - смещение)?
Думаю надо копать в сторону CLR-хостинг API.
А вообще, зачем такое потребовалось? Какая-то извращенная сериализация?
Цитата: hardcase
Думаю надо копать в сторону CLR-хостинг API.
А вообще, зачем такое потребовалось? Какая-то извращенная сериализация?
А вообще, зачем такое потребовалось? Какая-то извращенная сериализация?
Нет. Препод-извращенец. :D