Storing and Reading Attributes

 <  Day Day Up  >  

The manner in which attributes are stored and retrieved is defined by the .NET Framework, so a detailed discussion is beyond the scope of this book. However, it is worth briefly discussing how attributes work, to give a better understanding about them. Take the following example.

 <System.AttributeUsage(System.AttributeTargets.All)> _ Public Class HelpAttribute   Inherits Attribute   Public ReadOnly Message As String   Private _TopicNumber As Integer   Public Property TopicNumber() As Integer     Get       Return _TopicNumber     End Get     Set (Value As Integer)       _TopicNumber = Value     End Set   End Property   Public Sub New(ByVal Message As String)     Me.Message = Message   End Sub End Class <Help("This is a test class.", TopicNumber := 5393)> _ Class Test End Class 

When the Test class is compiled, the values specified as the arguments to the Help attribute are serialized into a binary form that is stored with the Test class definition in the assembly.

When a program asks for the attribute through reflection, the serialized attribute information is retrieved from the assembly. The method GetCustomAttributes on the class System.Type or on the class System.Reflection.Assembly can be used to retrieve attributes. This method returns an array of Object values that represent the custom attributes defined on the particular type or assembly. When the .NET Runtime builds the array of values, it takes each serialized attribute and then creates an instance of the attribute class, passing in the specified arguments and assigning the specified values to the fields and properties.

The following example shows how the GetCustomAttributes method can be used to retrieve attributes at runtime.

 Imports System <AttributeUsage(AttributeTargets.All)> _ Public Class HelpAttribute   Inherits Attribute   Public ReadOnly Message As String   Private _TopicNumber As Integer   Public Property TopicNumber() As Integer     Get       Return _TopicNumber     End Get     Set (Value As Integer)       _TopicNumber = Value     End Set   End Property   Public Sub New(ByVal Message As String)     Me.Message = Message   End Sub End Class <Help("This is a test class.", TopicNumber := 5393)> _ Class Test End Class Module Main   Sub Main()     Dim T As Type = GetType(Test)     Dim HelpAttribute As HelpAttribute     HelpAttribute = CType(T.GetCustomAttributes(True)(0), _       HelpAttribute)     Console.WriteLine(HelpAttribute.Message & ": " & _       HelpAttribute.TopicNumber)   End Sub End Module 

This example fetches the first attribute that was applied to Test , casts it to a HelpAttribute , and then prints the value of the attribute.

 <  Day Day Up  >  


The Visual Basic .NET Programming Language
The Visual Basic .NET Programming Language
ISBN: 0321169514
EAN: 2147483647
Year: 2004
Pages: 173
Authors: Paul Vick

flylib.com © 2008-2017.
If you may any questions please contact us: flylib@qtcs.net