You are hitting a potential stack overflow.
You need a private member to back your property or an automatic property.
Public Class Ship
Dim _name As String
Public Property name() As String
Get
Return _name
End Get
Set(ByVal value As String)
_name = value
End Set
End Property