Размещение структуры.
От: Bondik007  
Дата: 10.07.09 08:01
Оценка:
В чем разница этих структур:

[StructLayout(LayoutKind.Explicit, Pack = 1)]
    public struct BIND_STRUCT
    {
        [FieldOffset(0)]
            public BIND_FROM BindFrom;
        [FieldOffset(4)]
            public NAVAXE FromAxe;
        [FieldOffset(8)]
            public NAVBTN FromBtn;
        [FieldOffset(12)]
            public BIND_TO BindTo;
        [FieldOffset(16)]
            public JOY_BIND Joy;
        [FieldOffset(20)]
            public MOU_BIND Mou;       
    };

и

[StructLayout(LayoutKind.Explicit, Pack = 1)]
    public struct BIND_STRUCT
    {
        [FieldOffset(0)]
            public BIND_FROM BindFrom;
        [FieldOffset(4)]
            public NAVAXE FromAxe;
        [FieldOffset(8)]
            public NAVBTN FromBtn;
        [FieldOffset(8)]
            public BIND_TO BindTo;
        [FieldOffset(12)]
            public JOY_BIND Joy;
        [FieldOffset(12)]
            public MOU_BIND Mou;       
    };


У меня сейчас реализован первый вариант, но это я как-то не рационально использую память.
Почему ? Спросите Вы.
Потому, что единовременно мне нужно одно поле (св-во) FromBtn или BindTo, одновременно я их не использую; Joy или Mou.

Это все равно что иметь две машин и два гаража, при этом один гараж будет всегда пустой. Не рационально.

Как правильно организовать структуру, с учетом этого условия (единовременно мне нужно одно поле (св-во) FromBtn или BindTo ... )
Re: Размещение структуры.
От: _FRED_ Черногория
Дата: 10.07.09 08:25
Оценка: +2
Здравствуйте, Bondik007, Вы писали:

B>В чем разница этих структур:


Зачем было заставлять всех внимательно изучать описание, когда можно было бы просто и понятно выделить жирным отличия?

B>Как правильно организовать структуру, с учетом этого условия (единовременно мне нужно одно поле (св-во) FromBtn или BindTo ... )


Где и как используется структура? StructLayout+FieldOffset имеет смысл использовать либо для описания структуры, необходимой для interop-а либо для некоторых специфических извращений
Автор: _FRED_
Дата: 21.07.05
.

В первом случае описать структуру нужно так, как того требует неуправляемое API, а во втором крепко подумать, ибо те, кто будет поддерживать твой код, могут узнать, где ты живёшь

Экономить на полях в других случаях (создавать аналог сишного union) не надо, ибо незачем.
Help will always be given at Hogwarts to those who ask for it.
Re[2]: Размещение структуры.
От: Bondik007  
Дата: 10.07.09 09:53
Оценка:
_FR>Где и как используется структура?

Использую для хранения этой структуры в реестре. Т.е. т.о. известен ее размер -> можно записать в реестр. У меня подобных структур не одна.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.