Attributes
Developers can add metadata to their code through ''attributes''. There are two types of attributes, custom and pseudo custom attributes, and to the developer these have the sameAttribute
class. A custom attribute can be used on any method, property, class or entire assembly with the syntax: 'AttributeName''(optional ''parameter'', optional ''name=value'' pairs)/code> as in:
ustom ustom(1) ustom(1, Comment="yes")
Custom attributes are used by CLI extensively. Windows Communication Framework uses attributes to define service contracts, ASP.NET
ASP.NET is a server-side web-application framework designed for web development to produce dynamic web pages. It was developed by Microsoft to allow programmers to build dynamic web sites, applications and services. The name stands for Ac ...
uses these to expose methods as web service
A web service (WS) is either:
* a service offered by an electronic device to another electronic device, communicating with each other via the Internet, or
* a server running on a computer device, listening for requests at a particular port over a n ...
s, LINQ to SQL
Language Integrated Query (LINQ, pronounced "link") is a Microsoft .NET Framework component that adds native data Query language, querying capabilities to List of CLI languages, .NET languages, originally released as a major part of .NET Framew ...
uses them to define the mapping of classes to the underlying relational schema, Visual Studio
Visual Studio is an integrated development environment (IDE) developed by Microsoft. It is used to develop computer programs including web site, websites, web apps, web services and mobile apps. Visual Studio uses Microsoft software development ...
uses them to group together properties
Property is the ownership of land, resources, improvements or other tangible objects, or intellectual property.
Property may also refer to:
Philosophy and science
* Property (philosophy), in philosophy and logic, an abstraction characterizing an ...
of an object, the class developer indicates the category for the object's class by applying the ategory/code> custom attribute. Custom attributes are interpreted by application code and not the CLR. When the compiler sees a custom attribute it will generate custom metadata that is not recognised by the CLR. The developer has to provide code to read the metadata and act on it. As an example, the attribute shown in the example can be handled by the code:
class CustomAttribute : Attribute
The name of the class is mapped to the attribute name. The Visual C# compiler automatically adds the string "Attribute
" at the end of any attribute name. Consequently, every attribute class name should end with this string, but it is legal to define an attribute without the Attribute
-suffix. When affixing an attribute to an item, the compiler will look for both the literal name and the name with Attribute
added to the end, i. e. if you were to write ustom/code> the compiler would look for both Custom
and CustomAttribute
. If both exist, the compiler fails. The attribute can be prefixed with "@
" if you don't want to risk ambiguity, so writing Custom/code> will not match CustomAttribute
. Using the attribute invokes the constructor of the class. Overloaded constructors are supported. Name-Value pairs are mapped to properties, the name denotes the name of the property and the value supplied is set by the property.
Sometimes there is ambiguity concerning to what you are affixing the attribute. Consider the following code:
range
Range may refer to:
Geography
* Range (geographic), a chain of hills or mountains; a somewhat linear, complex mountainous or hilly area (cordillera, sierra)
** Mountain range, a group of mountains bordered by lowlands
* Range, a term used to i ...
public int ExampleMethod(string input)
What has been marked as orange? Is it the ExampleMethod
, its return value, or perhaps the entire assembly? In this case, the compiler will default, and treat the attribute as being affixed to the method. If this is not what was intended, or if the author wishes to clarify their code, an ''attribute target'' may be specified. Writing eturn: Orange/code> will mark the return value as orange, ssembly: Orange/code> will mark the entire assembly. The valid targets are assembly
, field
, event
, method
, module
, param
, property
, return
and type
.
A pseudo-custom attribute is used just like regular custom attributes but they do not have a custom handler; rather the compiler has intrinsic awareness of the attributes and handles the code marked with such attributes differently. Attributes such as Serializable
and Obsolete
are implemented as pseudo-custom attributes. Pseudo-custom attributes should never be used by ILAsm, as it has adequate syntax to describe the metadata.
Metadata storage
Assemblies contain tables of metadata. These tables are described by the CIL specification. The metadata tables will have zero or more entries and the position of an entry determines its index. When CIL code uses metadata it does so through a metadata token. This is a 32-bit
The bit is the most basic unit of information in computing and digital communication. The name is a portmanteau of binary digit. The bit represents a logical state with one of two possible values. These values are most commonly represented as ...
value where the top 8 bits identify the appropriate metadata table, and the remaining 24 bits give the index of the metadata in the table. The Framework SDK contains a sample called that will list the metadata tables in an assembly, however, this information is rarely of use to a developer. Metadata in an assembly may be viewed using the ILDASM tool provided by the .NET Framework SDK.
In the CIL standard, metadata is defined in ILAsm (assembly language) form, an on-disk representation form for storage, and a form that is embedded into assemblies of the Portable Executable
The Portable Executable (PE) format is a file format for executables, object file, object code, Dynamic-link library, dynamic-link-libraries (DLLs), and binary files used on 32-bit and 64-bit Microsoft Windows, Windows operating systems, as well ...
(PE, .exe or .dll) format. The PE form is based on the on-disk form.
Reflection
Reflection is the API
An application programming interface (API) is a connection between computers or between computer programs. It is a type of software interface, offering a service to other pieces of software. A document or standard that describes how to build ...
used to read CLI metadata. The reflection API provides a logical view of metadata rather than the literal view provided by tools like metainfo. Reflection in version 1.1 of the .NET framework can be used to inspect the descriptions of classes and their members, and invoke methods. However, it does not allow runtime access to the CIL for a method. Version 2.0 of the framework allows the CIL for a method to be obtained.
Other metadata tools
Besides the namespace, other tools are also available that can be used to handle metadata. The Microsoft .NET Framework ships a CLR metadata manipulation library that is implemented in native code
In computer programming, machine code is computer program, computer code consisting of machine language instruction set architecture, instructions, which are used to control a computer's central processing unit (CPU). For conventional binary ...
. Third-party tools to retrieve and manipulate metadata includ
PostSharp
an
Mono Cecil
can also be used.
See also
* Java annotation
In the Java computer programming language, an annotation is a form of syntactic metadata that can be added to Java source code. Class (computer programming), Classes, Method (computer programming), methods, Variable (computer science), variables ...
References
{{Common Language Infrastructure
Common Language Infrastructure