Here is Part 1 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. 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: 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: 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. 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. 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.
You need to be a premium member to use this feature. To access it, you'll have to upgrade your membership.
Become a sharper developer and jumpstart your career.
$0
$
. 00
monthly
For Basic members:
$20
For Premium members:
$45
For Elite members: