代码之家  ›  专栏  ›  技术社区  ›  Manfred Singer

使用公共属性作为保存通信协议的结构列表初始化

  •  0
  • Manfred Singer  · 技术社区  · 8 年前

    我想在类中保存通信。之后,我计划将类序列化为XML文件,其中所有数据点都在标记之间解码。

    因此,我想先解释一下我的通信协议。

    消息框架如下所示

    LIE01
    LIE02

    当通信结束时,我在一个原始变量中有大约3000条这样的电报。

    我在这里描述这些信息:

    • LIE01:标题+1个数据字
    • LIE02:标题+2个数据字

    我的想法是解码帧并将其保存在结构列表(或数组)中,这些结构是我的类的公共属性。

    Public Class Com
        Public Structure sLIE01
            Public Property Header As Int16
            Public Property data1 As Int16
        End Structure
    
        Public Structure sLIE02
            Public Property Header As Int16
            Public Property data1 As Int16
            Public Property data2 As Int16
        End Structure
    
        Public Property LIE01 As List(Of sLIE01)
            Get
                ?
            End Get
            Set(ByVal value As List(Of sLIE01))
                ?
            End Set
        End Property
    
        Public Property LIE02 As List(Of sLIE02)
            Get
                ?
            End Get
            Set(ByVal value As List(Of sLIE02))
                ?
            End Set
        End Property
    End Class
    

    不幸的是,我与其说是专家,不如说是初学者,所以我不知道如何将代码编写到 Set Get 特定的谎言信息。

    甚至我也不确定,我的方式是否是实现这一目的的常用方式。

    2 回复  |  直到 8 年前
        1
  •  1
  •   EmTom    8 年前

    您可以在代码中使用自动实现的属性,并跳过getter和setter( https://docs.microsoft.com/en-us/dotnet/visual-basic/programming-guide/language-features/procedures/auto-implemented-properties ). 然后,您可以为其分配列表,如:

    Dim newList as new List(of sLIE01)()
    ComInstance.Lie01 = newList
    

    您还可以直接对这些列表属性进行操作(只需确保在类构造函数中初始化它们,以避免NullReferenceException):

    Dim lie as sLie01
    ComInstance.Lie01.Add(lie)
    

    还可以考虑用类替换结构: https://docs.microsoft.com/en-us/dotnet/visual-basic/programming-guide/language-features/data-types/structures-and-classes

        2
  •  0
  •   Mary    8 年前

    如果仍要使用Get Set,它将如下所示。。。

    Private _LIE01 As List(Of sLIE01)
    Public Property LIE01 As List(Of sLIE01)
        Get
            Return _LIE01
        End Get
        Set(value as List(Of sLIE01))
            _LIE01 = value
        End Set
    End Property