型情報以外のメタデータとして属性も挙げられます。 .NET Frameworkでは属性を使うことでプログラムに型情報以外の追加的なメタデータを埋め込むことができ、それを実行時に取得・参照することができます。 属性にはコンパイラやランタイムが特別な操作を行うために使用されるものが存在するほか、独自に意味を定義して情報を埋め込むカスタム属性があります。

カスタム属性でメタデータを埋め込み、リフレクションにより埋め込んだメタデータを実行時に取得する
Imports System
Imports System.Reflection

' カスタム属性となるクラス
<AttributeUsage(AttributeTargets.Method, AllowMultiple := True)> _
Public Class AuthorAttribute
  Inherits Attribute

  Private _name As String

  Public Property Name As String
    Get
      Return _name
    End Get
    Set(ByVal value As String)
      _name = value
    End Set
  End Property

  Public Version As String

  Public Sub New(ByVal name As String)
    Me._name = name
  End Sub
End Class

Class Sample
  ' カスタム属性が設定されたメソッド
  <Author("Alice", Version := "1.0")> _
  <Author("Bob", Version := "1.1")> _
  <Author("Charlie", Version := "1.2")> _
  Public Shared Sub TestMethod()
  End Sub

  Shared Sub Main()
    ' メソッドの情報を取得する
    Dim method As MethodInfo = GetType(Sample).GetMethod("TestMethod")

    ' メソッドに設定されているカスタム属性を取得して列挙する
    For Each attr As AuthorAttribute In method.GetCustomAttributes(GetType(AuthorAttribute), False)
      ' 属性に設定されている値を表示する
      Console.WriteLine("Author: {0}, Version: {1}", attr.Name, attr.Version)
    Next
  End Sub
End Class
実行結果例
Author: Charlie, Version: 1.2
Author: Bob, Version: 1.1
Author: Alice, Version: 1.0

代表的な属性として、プログラムのバージョン情報を埋め込むための属性(アセンブリのバージョン情報を取得する)や、旧式化されたAPIであることを示すObsolete属性(機能の廃止・旧式化)、オブジェクトをシリアライズする際の動作を定義する属性(シリアライズの基本)などがあります。

その他、属性について、および属性の使用方法や独自に定義してその情報を取得する方法などについて詳しくは属性とメタデータで個別に解説しています。