Este lenguaje es horrible.
Como se puede concebir un lenguaje de programacion que no cierra las sentencias con punto y coma???
En fin
Public Class Persona

    'constructor por defecto
    Sub New()

    End Sub

    'constructor con parametros
    Sub New(ByVal nombre As String, ByVal apellidos As String, ByVal fecha As Date)
        strNombre = nombre
        strApellidos = apellidos
        strFecha = fecha
    End Sub


    Private strNombre As String
    Private strApellidos As String
    Private strFecha As Date

    'campo o ATRIBUTO Direcciones
    Public Direcciones() As String = {"tu casa", "la de la ama", "la del abuelo", "la mia"}

    Private msNotas() As String
    'property por defecto
    Default Property Notas(ByVal intIndice As Integer) As String
        Get
            Return Notas(intIndice)
        End Get
        Set(ByVal Value As String)
            If msNotas Is Nothing Then
                ReDim msNotas(0)
            Else
                ReDim Preserve msNotas(UBound(msNotas) + 1)
            End If
            msNotas(intIndice) = Value
        End Set
    End Property

    'property nombre
    Property nombre()
        Get
            Return strNombre
        End Get
        Set(ByVal Value)
            strNombre = Value
        End Set
    End Property

    'property apellidos
    Property apellidos()
        Get
            Return strApellidos
        End Get
        Set(ByVal Value)
            strApellidos = Value
        End Set
    End Property

    'property fecha
    Property fecha()
        Get
            Return strFecha
        End Get
        Set(ByVal Value)
            strFecha = Value
        End Set
    End Property

    ' Edad lo saco de nacimiento y actual.
    ReadOnly Property Edad() As Integer
        Get
            Dim actual, nac As Integer
            actual = Format(Now(), "yyyy")
            nac = Format(strFecha, "yyyy")

            'otra forma elegante:
            'DateDiff(DateInterval.Year, Now(), strFecha)

            Return (actual - nac)
        End Get
    End Property



    'nombre completo
    Function NombreCompleto(ByVal Titulo As String)
        If (Trim(Titulo) <> "") Then
            Return Titulo & " " & strNombre & " " & strApellidos
        Else
            Return strNombre & " " & strApellidos
        End If
    End Function

    'nombre completo sobrecargado
    Function NombreCompleto()
        Return strNombre & " " & strApellidos
    End Function

    'metodo mostrar notas
    Sub mostrarNotas()
        Dim elemento As String
        Dim contador As Integer

        contador = 0

        'recorremos el array
        For Each elemento In msNotas
            contador += 1
            Console.WriteLine(contador & ".- " & elemento & ".")

        Next

    End Sub
End Class