The Visual Basic compiler and .NET platform automatically recognize the meaning of the attributes based on attribute classes in the .NET Framework Class Library. This recognition isn’t true, however, for custom attributes. Thus, not only must you define them, you must also develop a set of routines that will identify the presence of an attribute so your code can handle them.
NET assemblies are self-describing; when the compiler creates the .NET assembly, it writes metadata describing the assembly and its classes and methods to the assembly manifest. This metadata is then accessed programmatically at runtime by using the .NET Framework’s reflection classes.
An assembly’s metadata is similar to a COM type library. In addition to their greater accessibility through .NET Framework APIs, assembly metadata is always stored along with the assembly. In contrast, although a type library can be stored in the EXE or DLL containing the COM object (as did previous versions of Visual Basic), it is most commonly stored in a file different from the file containing the COM objects it describes.
The .NET Framework provides support for reflection in the
Type class (in the System namespace) and
in the types found in the System.Reflection namespace. The
following code creates a
console mode application that uses
the reflection classes to extract information about the
<DeveloperNote> custom attribute and the
program elements to which it is applied:
Option Strict On Imports ...