.NET Tutorials, Forums, Interview Questions And Answers
Welcome :Guest
 
Sign In
Register
 
Win Surprise Gifts!!!
Congratulations!!!


Top 5 Contributors of the Month
david stephan

Home >> Articles >> .Net Framework >> Post New Resource Bookmark and Share   

 Subscribe to Articles

Attribute Oriented Programming: Part 2

Posted By:Mahadesh Mahalingappa       Posted Date: October 09, 2011    Points: 200    Category: .Net Framework    URL: http://www.dotnetspark.com  

In this article we will have a deeper look into what we actually did in our first try at Attributes and also look at some of the features used.
 

In this article we will have a deeper look into what we actually did in our first try at Attributes and also look at some of the features used.

You can also find the part one of this series here

When we created our first attribute we used a Attribute AttributeUsage on top of our attribute as shown below:

[AttributeUsage(AttributeTargets.All, AllowMultiple = false)]
 public sealed class FixMeAttribute : System.Attribute

Lets take a look at what it is.

AttributeUsage - Describes how a custom attribute class can be used.

Do read this http://msdn.microsoft.com/en-us/library/tw5zxet9(v=vs.71).aspx

We had specified the AttributeTargets and AllowMultiple properties in our example.

In our example for the Property AttributeTargets we choose All. That would mean that the attribute we created could be applied to anything or everything. For Example: Assembly, Class, Constructor etc.

This is not exactly a bright thing to do as it would lead to runtime errors.

We could restrict our attribute to be used to Assembly or a class or Constructor as shown below:

Attribute Oriented Programming


Lets say we choose Enum option as shown below:
[AttributeUsage(AttributeTargets.Enum, AllowMultiple = false)]
public sealed class FixMeAttribute : System.Attribute

Now just run our program from first article again.

The Program does not build and throws a compile time error as:

Attribute Oriented Programming

Hence we can avoid many unwanted errors.

I will try to provide a example for each of the case in some future article.

Next AllowMultiple:

The AllowMultiple property indicates whether multiple instances of your attribute can exist on an element. If set to true, multiple instances are allowed; if set to false (the default), only one instance is allowed.

Lets test it with a scenario .

Modify the Attribute Usage as shown below :
 
[AttributeUsage(AttributeTargets.All, AllowMultiple = false)]
 public sealed class FixMeAttribute : System.Attribute

Apply another FixMe attribute on the Class as shown below :
[FixMe("Incorporate 4.0 features")]
 [FixMe("Incorporate 3.5 features")]
 class MyClass
 {
 }


Compile it. The following error is thrown.

Attribute Oriented Programming

Now lets modify the AllowMultiple = true as shown below:
[AttributeUsage(AttributeTargets.All, AllowMultiple = true)]
public sealed class FixMeAttribute : System.Attribute

Now when we run the Program. It Builds and the following output is displayed.

Attribute Oriented Programming

One last point I missed was in the CustomAttributeTest we used the following line as shown below:
Object[] atts = clazz.GetCustomAttributes(typeof(FixMeAttribute), false);

This statement was used to Access the FixMeAttribute at runtime.

Well we need not take the effort of passing the Type of the Attribute.

Simply used the code below and job would be done.
Object[] atts = clazz.GetCustomAttributes(false);


All the Types would be accessed.

In future article we will look into other usages of Attributes. Happy coding.
 Subscribe to Articles

     

Further Readings:

Responses

No response found. Be the first to respond this post

Post Comment

You must Sign In To post reply
Find More Articles on C#, ASP.Net, Vb.Net, SQL Server and more Here

Hall of Fame    Twitter   Terms of Service    Privacy Policy    Contact Us    Archives   Tell A Friend