Generics VB.Net

Imports System.Collections
Public Class MainClass
   Public Shared Sub Main()
        Dim rootNode, child1 As TreeNode(Of Employee)
        rootNode = New TreeNode(Of Employee)(New Employee(111, "A"))
        child1 = rootNode.AddChild(New Employee(222, "B"))
        rootNode.AddChild(New Employee(333, "C"))
        child1.AddChild(New Employee(444, "D"))
        child1.AddChild(New Employee(555, "E"))
        Console.WriteLine(rootNode)
   End Sub
End Class
Public Class TreeNode(Of T)
    Public Data As T
    Private _childNodes As ArrayList
    Public Sub New(ByVal nodeData As T)
        Me.Data = nodeData
        Me._childNodes = New ArrayList
    End Sub
    Public ReadOnly Property Children() As TreeNode(Of T)()
        Get
            Return Me._childNodes.ToArray()
        End Get
    End Property
    Default Public ReadOnly Property Item(ByVal index As Long) As TreeNode(Of T)
        Get
            Return Me._childNodes(index)
        End Get
    End Property
    Public Function AddChild(ByVal nodeData As T) As TreeNode(Of T)
        Dim newNode As TreeNode(Of T) = New TreeNode(Of T)(nodeData)
        Me._childNodes.Add(newNode)
        Return newNode
    End Function
    Overrides Function ToString() As String
        Return Me.Data.ToString()
    End Function
End Class
Public Class Employee
    Private _id As Integer
    Private _name As String
    Public Sub New(ByVal id As Integer, ByVal name As String)
        Me._id = id
        Me._name = name
    End Sub
    Public Overrides Function ToString() As String
        Return Me._name
    End Function
End Class