Reflection VB.Net

Imports System
Imports System.Reflection
Imports System.Collections
Imports Microsoft.VisualBasic
Public Class MyProperty
    Private myCaption As String = "A Default caption"
    Public Property Caption() As String
        Get
            Return myCaption
        End Get
        Set(ByVal Value As String)
            If myCaption <> value Then
                myCaption = value
            End If
        End Set
    End Property
    Private strings() As String = {"abc", "def", "ghi", "jkl"}
    Public Default Property Item(ByVal Index As Integer) As String
        Get
            Return strings(Index)
        End Get
        Set
            strings(Index) = Value
        End Set 
    End Property
End Class
Public Class Example
    Public Shared Function Main() As Integer
        Dim t As Type = GetType(MyProperty)
        Dim pi As PropertyInfo = t.GetProperty("Caption")
        Dim params As ParameterInfo() = pi.GetIndexParameters()
        pi = t.GetProperty("Item")
        params = pi.GetIndexParameters()
        Console.WriteLine(t.FullName & "." & pi.Name & " has " & params.GetLength(0) & " parameters.")
        For Each p As ParameterInfo In params
            Console.WriteLine("   Parameter: " & p.Name)
        Next
        Return 0
    End Function
End Class