0

Could someone explain why I obtain a NullReference Exception to an objet that I initialized as New List(Of)??

Module Module1
  ' MAIN =================================    
  Sub Main()
    Console.Clear()
    Console.WriteLine("Creating Bar")
    Dim myBar As New Bar()
    Console.ReadLine()
  End Sub    
End Module

Class Foo
  Public Overridable Property Test As String

  Public Sub New()
    Me.Test = "hello"
  End Sub
End Class

Class Bar
  Inherits Foo
  Private _MyString As New List(Of String)

  Public Sub New()
    MyBase.New()
  End Sub

  Public Overrides Property Test As String
    Get
      Return MyBase.Test
    End Get
    Set(value As String)
      MyBase.Test = value
      ' NULL REFERENCE EXCEPTION ???????!!!!!!!!!!!
      Console.WriteLine("{0}, and _MyString.Count = {1}", MyBase.Test, Me._MyString.Count)
    End Set
  End Property
End Class
serhio
  • 28,010
  • 62
  • 221
  • 374

1 Answers1

2

Foo.New() runs before the field initializers in Bar().

The New part of As New List(Of String) is actually part of the Bar.New() constructor, which runs after MyBase.New().

SLaks
  • 868,454
  • 176
  • 1,908
  • 1,964
  • 3
    Don't call virtual members in a constructor. http://msdn.microsoft.com/en-us/library/ms182331.aspx – SLaks Sep 25 '12 at 14:55