Я пытаюсь построить структуру в VB, чтобы позволить мне хранить и анализировать сообщение на основе IP/UDP, которое я получаю как HEX, кодированный ASCII.Структуры с условными элементами
Фокус в том, что после того, как я прошел мимо заголовка IP и заголовка UDP, данные, следующие за ним, имеют тип переменной структуры. Под этим я подразумеваю, что есть основная начальная структура сообщений, которая имеет данные в определенных полях ... две трети из которых являются необязательными ... но тогда фактические данные, реальное мясо передачи, находятся в одном из 15 разных сообщений структур.
Так есть способ условно определить один из членов структуры, основанный на данных, которые я вкладываю в него?
Мой план состоял в том, чтобы создать функцию New(), в которой вы могли бы просто передать строку сообщения, и она будет анализировать все данные и заполнять элементы структур по мере необходимости. Но как я могу сделать тип объявления одного из членов структуры зависимым от данных, которые будут разбираться в функции New()? Или нет способа это сделать?
В основном что-то (хотя и грубо), как это:
Private Structure DevMsg
ReadOnly IPHeader As IP_HDR
ReadOnly UDPHeader As UDP_HDR
ReadOnly MsgType As DevMsgType
Select Case MsgType
Case Msg0
ReadOnly Data as MsgType0
Case Msg1
ReadOnly Data as MsgType1
...
End Select
Public Sub New(ByVal msg as String)
... String parser ...
MsgType = blah
... More parsing ...
Data.property0 = blah2
Data.property1 = blah3
...
End Sub
End Structure
@KirillShlenskiy на структуру была способом иметь такие данные в течение многих лет ([знаменитый пример] (https://msdn.microsoft.com/en-us/library/windows/desktop/ms221627%28v=vs.85%29.aspx)). Вы можете иметь это [в VB.NET тоже] (https://msdn.microsoft.com/en-us/library/system.runtime.interopservices.fieldoffsetattribute%28v=vs.110%29.aspx), хотя вы возможно не следует. – GSerg
@GSerg, хорошая точка re явным образом структуры структуры, хотя я серьезно надеюсь, что это не так, как автор этого вопроса идет. –
@ Kirill На самом деле это целая причина, по которой я задавал этот вопрос. Я действительно не знаю, к какому пути идти в этот момент. Я решительно старался избежать определения структуры, в которой ВСЕ из подструктур типа сообщения были частью его определения. Я родом из вложенного мира.Распространенное использование памяти - это не-no в любое время;) – balmerjd