Размещение ссылочных и не ссылочных типов в одной области па

Язык Visual Basic на платформе .NET.

Модераторы: Ramzes, Sebas

Alprog
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 127
Зарегистрирован: 15.05.2008 (Чт) 14:21
Откуда: Владивосток

Размещение ссылочных и не ссылочных типов в одной области па

Сообщение Alprog » 01.03.2009 (Вс) 14:18

Разбираюсь с атрибутами в VB.Net.

Мне удалось поместить в одну область памяти стандарные типы:

Код: Выделить всё
<StructLayout(LayoutKind.Explicit, pack:=1)> Class H1
    <FieldOffset(0)> Public Int as Integer
    <FieldOffset(0)> Public B1 as Byte
    <FieldOffset(1)> Public B2 as Byte
    <FieldOffset(2)> Public B3 as Byte
    <FieldOffset(3)> Public B4 as Byte
End Class


Также это легко проделать с массивами (я так понимаю, у них просто ссылка на начальный элемент совпадает):

Код: Выделить всё
<StructLayout(LayoutKind.Explicit, pack:=1)> Class H2
    <FieldOffset(0)> Public Int() as Integer 'Можно написать int(1), но память и так выделится следующей строкой
    <FieldOffset(0)> Public B(7) as Byte
End Class


Но можно ли объединить ссылочный и не ссылочный тип?
Нужно, чтобы Integer располагался там, где начинается байтовый массив.
Так, естественно, не работает:

Код: Выделить всё
<StructLayout(LayoutKind.Explicit, pack:=1)> Class H
    <FieldOffset(0)> Public Int as Integer
    <FieldOffset(0)> Public B(3) as Byte
End Class


И так тоже:

Код: Выделить всё
<StructLayout(LayoutKind.Explicit, pack:=1)> Class H
    <FieldOffset(0)> Public Int as Integer
    <FieldOffset(0)> <MarshalAs(UnmanagedType.ByValArray, sizeconst := 4> Public B(3) as Byte
End Class


Может можно это как-нибудь сделать?

p.s. Меня вполне устраивает вариант с массивами (если элемент в массиве один, для удобства можно задать доступ к нему через свойство).
Но вопрос всё-равно остаётся в силе, в целях повышения образованности.

Вернуться в Visual Basic .NET

Кто сейчас на конференции

Сейчас этот форум просматривают: Mail.ru [бот] и гости: 71

    TopList  
cron