Что можно считать экземпляром в VB.NET: ссылка на объект не установлена ​​на экземпляр объекта - PullRequest
2 голосов
/ 21 апреля 2011

Я застрял со следующей проблемой.У меня есть класс с конструктором (метод New(<args>)).У меня также есть List объектов этого класса, которые я хотел бы заполнить.Чтобы привести пример, вот некоторый игрушечный код (без свойств и тому подобное):

Class Thing
    Public PositionX, PositionY As UInteger
    Public Name As String

    Public Sub New(ByVal name As String, _
                   ByVal positionX As UInteger, _
                   ByVal positionY As UInteger)
        Me.PositionX = positionX
        Me.PositionY = positionY
        Me.Name = name
    End Sub

End Class

Кроме того, в другом месте кода я объявляю список Thing s:

Dim things As List(Of Thing)

При попытке запустить следующую строку кода, things.Add(New Thing("some name', 1, 1)), я получаю исключение Object reference not set to an instance of an object.Очевидно, у меня неправильное понимание того, что на самом деле является экземпляром объекта и как VB.NET работает с ними.Я предполагаю, что это восходит к моему фону C / C ++.

Конечно, я мог бы инициализировать переменную с помощью конструктора New, и затем добавить его в список:

Следующее также не работает:

Dim myThing = New Thing("some name", 1, 1)
things.Add(myThing)

Мой вопрос: почему просто сказать, что New Thing("some name', 1, 1) не создает экземпляр из Thingкак правильно думать о таких вещах?Что-то я делаю не так по дизайну?

Ура!

Ответы [ 2 ]

4 голосов
/ 21 апреля 2011

Похоже, вам просто нужно создать экземпляр списка:

Dim things As New List(Of Thing)

Я думаю, что все нормально с обработкой класса thing, но список тоже нуждается в экземпляре - это класс/ экземпляр так же, как вещи.

2 голосов
/ 21 апреля 2011

Вам нужно сделать:

Dim things as New List(Of Thing)

или:

Dim things as List(Of Thing)
things=New List(Of Thing)
...