Вместо того, чтобы рассказать вам, как исправить этот код напрямую, я собираюсь объяснить, что, по моему мнению, не так с вашим мыслительным процессом, так что вы также можете лучше написать код в будущем.
То, что я вижу здесь, - это простое недоразумение для кого-то новичка в программировании работы классов.Когда вы создаете и определяете класс, вы (пока) не выделяете какую-либо память на компьютере и еще не говорите компьютеру делать что-либо.Все, что вы делаете, это рассказывает компьютеру о том, как объект может выглядеть в какой-то момент в будущем.Ничего не происходит, пока вы на самом деле не создадите экземпляр этого класса:
Public Class MyClass
Public MyField As String
End Class
'Nothing has happened yet
Public myInstance As New MyClass()
'Now finally we have something we can work with,
' but we still haven't done anything
myInstance.MyField = "Hello World"
'It's only after this last line that we put a string into memory
Классы могут содержать только несколько определенных типов вещей: поля, свойства, делегаты (события),и Методы (Подставки и Функции).Все эти вещи в классе являются чем-то, а не самой вещью.
Глядя на ваши примеры, код из вашего второго примера принадлежит внутри метода.
Если вы хотите, чтобы этот код запускался каждый раз, когда вы работаете с новым экземпляром вашего класса, то есть специальный метод, называемый constructor
, который вы можете использовать.Это объявляется так:
Public Class MyClass
Public MyField As String
'This is a constructor
Public Sub New()
MyField = "Hello World"
End Sub
End Class
Однако даже после этого последнего примера вы все еще не сказали компьютеру выполнять какую-либо работу.Опять же, вы должны создать экземпляр класса, прежде чем код в этом конструкторе будет запущен.
Это верно для всего кода во всех программах .Net в любом месте.Способ запуска вашей программы состоит в том, что .Net Framework создает экземпляр специального объекта или формы, а затем вызывает (запускает) конкретный метод в этой форме, чтобы как-то сдвинуть с мертвой точки вашу программу.Все остальное приходит оттуда.
В конце концов вы также узнаете об общих элементах и модулях, которые могут (как бы) нарушить это правило, поскольку вам не нужно создавать экземпляр объекта перед его использованием.,Но до тех пор, пока вы не освоитесь с экземплярами, вам не следует об этом слишком беспокоиться.
Наконец, я хочу указать на две практики в вашем коде, которые профессиональные программисты сочли бы плохой практикой.Первый ArrayLists.Я могу простить это, потому что я подозреваю, что вы проходите курс обучения, который еще не охватывал дженерики.Я только поднимаю это, чтобы вы знали, чтобы не слишком привязываться к ним: впереди что-то лучшее.Второй - ваш префикс obj.Когда-то это считалось хорошей практикой, но уже не модно и теперь считается вредным для читабельности вашего кода.Вы не должны использовать эти префиксы.