Какая разница между двумя списками пользовательских классов?

#vb.net

#vb.net

Вопрос:

Я переношу приложение с VBA на VB.Net , и переключился с 2 общих 2D-массивов на 2 списка пользовательских классов, lst1 и lst2. (Объекты намеренно отличаются, поскольку они предназначены для разных целей.) В процессе отладки я использовал два разных подхода к каждому из них. Оба, кажется, работают, но мне интересно, отличаются ли они / как они отличаются под капотом. Также с удовольствием приму предложения по их добавлению / стилю. TIA.

 Module SOExampleCode

''' <summary>
''' Object1
''' </summary>
Public Class o1
    Public Property Idx As Long                 'Extra Index if needed
    Public Property LabelTop As String            'Text Label
    Public Property PrdStartDt As Date            'PeriodStart Date
    Public Property PostnX As Double            'Position

    Sub Clear()
        Idx = 0
        LabelTop = ""
        PrdStartDt = Nothing
        PostnX = 0
    End Sub

End Class

''' <summary>
''' Object2
''' </summary>
Public Class o2
    Public Property Idx As Long             'Extra Index if needed
    Public Property RowNum As Long          'Number of this row in the chart
    Public Property Label As String      'Text Label - optional
    Public Property PostnY As Double        'Position in points on Y axis

    Sub New(Optional ByVal Idx As Long = 0, Optional ByVal RowNum As Long = 0, Optional ByVal Label As String = "",
            Optional ByVal PostnY As Double = 0)
        _Idx = Idx
        _RowNum = RowNum
        _Label = Label
        _PostnY = PostnY

    End Sub

    Sub Clear()
        Idx = 0
        RowNum = 0
        Label = ""
        PostnY = 0
    End Sub

End Class



Public lst1 As New List(Of o1)
Public lst2 As New List(Of o2)



Sub MainLoad()
    Dim limit1 As Long
    Dim limit2 As Long
    Dim i As Long
    Dim tmp1 As o1
    Dim str1 As String
    Dim dt1 As Date


    'Loading of List 1 / Object 1
    For i = 1 To limit1
        tmp1 = New o1
        With tmp1
            .Idx = i
            .LabelTop = str1
            .PrdStartDt = dt1
            .PostnX = 123.456

            lst1.Add(tmp1)
        End With
    Next i


    'Loading of List 2 / Object 2
    For i = 1 To limit2
        lst2.Add(New o2(Idx:=i, RowNum:=100   i, Label:=str1, PostnY:=654.321))
    Next i

End Sub
  

Конечный модуль

Комментарии:

1. Различия между двумя списками: lst1 и lst2 — это два разных объекта, которые содержат коллекции разных объектов. Каждый объект в каждой коллекции является отдельной ссылкой. — Не совсем понятно, о чем на самом деле идет речь.

2. ХОРОШО. 1) Создавая экземпляр tmp1 для каждого цикла 1 / lst1, я замедляю процесс и потребляю больше памяти, чем необходимо? Или больше, чем в loop2 / lst2?

3. Вы спрашиваете, какой метод построения объектов лучше?

4. Вы создаете новый экземпляр o1 and o2 в обоих случаях. — Экземпляр объекта класса создается с использованием ключевого слова new() . Если вы не присваиваете значения свойствам, используются значения по умолчанию. Ссылочные типы будут нулевыми (ничего), если они не созданы (то же самое для типов значений с нулевым значением).

5. Прямой личный стиль каким бы способом вы это ни делали, оба метода достигают одного и того же. Могут быть очень незначительные различия в производительности, так или иначе, но, вероятно, этого недостаточно, чтобы беспокоиться