provided by: 
Originally published at Internet.comVisual Studio .Net creates assemblies. An assembly is a combination of metadata and a portable executable. Unlike applications built in earlier versions of Visual Studio, Visual Studio .Net combines extra information necessary to describe the executable. This extra information is the metadata, and is the technical feature that supports xcopy deployment of Visual Basic .Net assemblies. It is the Attribute class that allows you to add metadata to your assemblies.
The Attribute class is defined in the System namespace. Because Attribute is a class, you can implement new attributes by subclassing the System.Attribute class. Implementing new attribute classes is a way for you to effectively extend Visual Studio .Net without needing or having access to the Visual Studio .Net or Visual Basic .Net source code. This is an important concept, so I will repeat it. Attributes allows you to add metadata to your assemblies, and implementing custom attributes allows you to extended .Net. The best part is that everything you know about object-oriented programming in Visual Basic .Net can be leveraged to create new attributes. If you know how to use inheritance, define classes, and use attributes then you can create custom attributes...
Read article at Internet.com site