- Код: Выделить всё
Public Class Dot
Public X As Double
Public Y As Double
Public Sub New()
End Sub
Public Sub New(ByVal X As Double, ByVal Y As Double)
Me.X = X
Me.Y = Y
End Sub
End Class
Public Class Punkt
Public Koord_AB As Dot
Public Koord_XY As Dot
Public A_plus As Double
Public A_minus As Double
Public B_plus As Double
Public B_minus As Double
Public Important As Double
Private Sub New()
End Sub
Public Sub New(ByVal Koord_AB As Dot, ByVal Koord_XY As Dot, ByVal A_plus As Double, ByVal A_minus As Double, ByVal B_plus As Double, ByVal B_minus As Double, ByVal important As Double)
Me.A_minus = A_minus
Me.A_plus = A_plus
Me.B_minus = B_minus
Me.B_plus = B_plus
Me.Koord_AB = Koord_AB
Me.Koord_XY = Koord_XY
End Sub
End Class
Мне нужен массив элементов этого класса.
Сначала создаю сам массив, потом вроде как пробегаюсь и создаю элементы. Выглядит это так (есть некоторые упущения не касающиеся кода, если надо могу кинуть код целиком). Пробегаем по файлу смотрим сколько позиций, потом считываем каждую строчку и делаем из нее новый экземпляр класса. Так?
- Код: Выделить всё
Dim BaseNet As Punkt()
Private Sub BtnOpen_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles BtnOpen.Click
OpenDialog.ShowDialog()
If Not OpenDialog.FileName = "" Then
Dim T As Integer
Dim Aplus, Aminus, Bplus, Bminus, dotX, dotY, dotA, dotB, Important As Double
Dim CurrentRange As String
Dim ExcelApp As New Excel.Application
Dim ExcelWkb As Excel.Workbook
Dim ExcelWks As Excel.Worksheet
ExcelApp.Visible = False
ExcelApp.DisplayAlerts = False
ExcelWkb = ExcelApp.Workbooks.Open(OpenDialog.FileName)
ExcelWks = ExcelWkb.Worksheets(1)
'Считывание данных о пунктах
For T = 1 To 5000'(тупо считаем)
If ExcelWks.Range("A" & Str(T + 1).Trim).Value = Nothing Then
Dim BaseNet(T) As Punkt
Exit For
End If
Next T
If T < 3 Then Exit Sub 'Если точек мало - ну нафиг
For T = 1 To T - 1
CurrentRange = Str(T + 1).Trim
dotA = ExcelWks.Range("A" & CurrentRange).Value
dotB = ExcelWks.Range("B" & CurrentRange).Value
dotX = ExcelWks.Range("C" & CurrentRange).Value
dotY = ExcelWks.Range("D" & CurrentRange).Value
Aplus = ExcelWks.Range("E" & CurrentRange).Value
Aminus = ExcelWks.Range("F" & CurrentRange).Value
Bplus = ExcelWks.Range("G" & CurrentRange).Value
Bminus = ExcelWks.Range("H" & CurrentRange).Value
Important = ExcelWks.Range("I" & CurrentRange).Value
'Вот тут и начинается заморочка
BaseNet(T) = New Punkt(New Dot(dotA, dotB), New Dot(dotX, dotY), Aplus, Aminus, Bplus, Bminus, Important)
End If
Next T
ExcelWkb.Close()
ExcelApp.Quit()
ExcelApp = Nothing
End If
End Sub
Собственно в родном MSDN пишут примерно то же самое:
- Код: Выделить всё
'Чтобы создать массив объектов
'Объявите массив, как показано в приведенном ниже образце кода. 'Поскольку индексация массивов идет от нуля, они содержат на один 'член больше, чем объявлено в верхней границе.
Dim x(10) As Widget ' Contains 11 members, from x(0) to x(10).
'Создайте экземпляр каждого члена массива, или присвойте каждому 'из членов ссылку на уже существующий объект. Ниже приведен 'пример использования обоих способов.
' Instantiates each member of an array by using a loop.
Dim q As Integer
For q = 0 to 10
x(q) = New Widget()
Next
Меня терзают смутные сомнения, что мой конструктор кривой. Вот скажите в каком конкретно месте я туплю? Ошибка появляется там где создаю новый экземпляр (пытаюсь)
Object reference not set to an instance of an object.