Listato 1. Definizione della classe Auto

Imports Microsoft.VisualBasic

Public Class Auto
  Private mModello As String
  Private mMarca As String
  Private mCosto As Decimal

  Public Property Modello() As String
    Get
      Return mModello
    End Get
  
    Set(ByVal Valore As String)
      mModello = Valore
    End Set
  End Property

  Public Property Marca() As String
    Get
      Return mMarca
    End Get
    
    Set(ByVal Valore As String)
      mMarca = Valore
    End Set
    
  End Property

  Public Property Costo() As Decimal
    Get
      Return mCosto
    End Get
    Set(ByVal Valore As Decimal)
      mCosto = Valore
    End Set
  End Property

  Public Function CalcolaCostoNoleggio(ByVal numGiorni As Integer) As Decimal
    CalcolaCostoNoleggio = Costo * numGiorni
  End Function

End Class

Listato 2. La procedura Test() nel dettaglio

Private Sub Test()
  Try
    Dim pathAsm As String = Server.MapPath("bin/autonoleggio.dll")
    Dim extAssembly As System.Reflection.Assembly = System.Reflection.Assembly.LoadFrom(pathAsm)
    Dim types As Type() = extAssembly.GetTypes()
    Dim t As Type = extAssembly.GetType(Server.MapPath("bin/autonoleggio.dll"))
    For Each t In types
      Response.Write("<strong>Nome</strong><br />")
      Response.Write(t.FullName & "<br />")
      Response.Write("<strong>Proprietà</strong><br />")
      GetProperties(t)
      Response.Write("<strong>Metodi</strong><br />")
      GetMethods(t)
    Next

  Catch ex As Exception
    Response.Write(ex.Message.ToString())
  End Try
End Sub

Listato 3. Il metodo GetProperties

Public Sub GetProperties(ByRef theType As Type)

  ' Legge le proprietà dell'oggetto
  Dim myProperties() As PropertyInfo = theType.GetProperties((BindingFlags.Public Or BindingFlags.Instance))

  ' Loop che legge le proprietà
  Dim PropertyItem As PropertyInfo
  For Each PropertyItem In myProperties
    With PropertyItem
      If theType.IsPublic Then
        Response.Write(.Name & " è di tipo " & .PropertyType.ToString & " e ")

        ' determina se la proprietà può essere letta
        If .CanRead Then
          Response.Write(" può essere letta e ")
        Else
          Response.Write("non può essere letta e ")
        End If

        ' determina se la proprietà può essere scritta
        If .CanWrite Then
          Response.Write(" può essere scritta.")
        Else
          Response.Write(" non può essere scritta.")
        End If
      End If
    End With
    Response.Write("<br>")
  Next
End Sub

Listato 4. Il metodo GetMethods

Public Sub GetMethods(ByRef theType As Type)

  'Legge i metodi dell'oggetto
  Dim myMethods() As MethodInfo = theType.GetMethods

  ' Loop che legge i metodi
  Dim MethodItem As MethodInfo

  For Each MethodItem In myMethods
    With MethodItem
      If theType.IsPublic Then
        Response.Write(.Name & " restituisce " & .ReturnType.ToString & "<br />")

        ' determina se il metodo è pubblico o privato
        If .IsPrivate Then
          Response.Write(" è privato e non può essere eseguito " & "<br />")
        End If

        If .IsConstructor Then
          Response.Write(" ed è il costruttore per " & theType.Name & "<br />")
        End If
        Response.Write("<br>")
      End If
    End With
  Next
End Sub