#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
ando2
в обоих случаях. — Экземпляр объекта класса создается с использованием ключевого слова new() . Если вы не присваиваете значения свойствам, используются значения по умолчанию. Ссылочные типы будут нулевыми (ничего), если они не созданы (то же самое для типов значений с нулевым значением).5. Прямой личный стиль каким бы способом вы это ни делали, оба метода достигают одного и того же. Могут быть очень незначительные различия в производительности, так или иначе, но, вероятно, этого недостаточно, чтобы беспокоиться