Здравствуйте, Bondik007, Вы писали:
B>В чем разница этих структур:
Зачем было заставлять всех внимательно изучать описание, когда можно было бы просто и понятно выделить жирным отличия?
B>Как правильно организовать структуру, с учетом этого условия (единовременно мне нужно одно поле (св-во) FromBtn или BindTo ... )
Где и как используется структура? StructLayout+FieldOffset имеет смысл использовать либо для описания структуры, необходимой для interop-а либо для некоторых
специфических извращенийАвтор: _FRED_
Дата: 21.07.05
.
В первом случае описать структуру нужно так, как того требует неуправляемое API, а во втором крепко подумать, ибо те, кто будет поддерживать твой код, могут узнать, где ты живёшь
Экономить на полях в других случаях (создавать аналог сишного union) не надо, ибо незачем.
В чем разница этих структур:
[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 ... )