很好的例子,一看就懂
代码 // Copyright (C) Microsoft Corporation. All rights reserved. // AttributesTutorial.cs // This example shows the use of class and method attributes. using System; using System.Reflection; using System.Collections; // The IsTested class is a user-defined custom attribute class. // It can be applied to any declaration including // - types (struct, class, enum, delegate) // - members (methods, fields, events, properties, indexers) // It is used with no arguments. public class IsTestedAttribute : Attribute{ public override string ToString() { return " Is Tested " ; }} // The AuthorAttribute class is a user-defined attribute class. // It can be applied to classes and struct declarations only. // It takes one unnamed string argument (the author's name). // It has one optional named argument Version, which is of type int. [AttributeUsage(AttributeTargets.Class | AttributeTargets.Struct)] public class AuthorAttribute : Attribute{ // This constructor specifies the unnamed arguments to the attribute class. public AuthorAttribute( string name) { this .name = name; this .version = 0 ; } // This property is readonly (it has no set accessor) // so it cannot be used as a named argument to this attribute. public string Name { get { return name; } } // This property is read-write (it has a set accessor) // so it can be used as a named argument when using this // class as an attribute class. public int Version { get { return version; } set { version = value; } } public override string ToString() { string value = " Author : " + Name; if (version != 0 ) { value += " Version : " + Version.ToString(); } return value; } private string name; private int version;} // Here you attach the AuthorAttribute user-defined custom attribute to // the Account class. The unnamed string argument is passed to the // AuthorAttribute class's constructor when creating the attributes. [Author( " Joe Programmer " )] class Account{ // Attach the IsTestedAttribute custom attribute to this method. [IsTested] public void AddOrder(Order orderToAdd) { orders.Add(orderToAdd); } private ArrayList orders = new ArrayList();} // Attach the AuthorAttribute and IsTestedAttribute custom attributes // to this class. // Note the use of the 'Version' named argument to the AuthorAttribute. [Author( " Jane Programmer " , Version = 2 ), IsTested()] class Order{ // add stuff here ... } class MainClass{ private static bool IsMemberTested(MemberInfo member) { foreach ( object attribute in member.GetCustomAttributes( true )) { if (attribute is IsTestedAttribute) { return true ; } } return false ; } private static void DumpAttributes(MemberInfo member) { Console.WriteLine( " Attributes for : " + member.Name); foreach ( object attribute in member.GetCustomAttributes( true )) { Console.WriteLine(attribute); } } public static void Main() { // display attributes for Account class DumpAttributes( typeof (Account)); // display list of tested members foreach (MethodInfo method in ( typeof (Account)).GetMethods()) { if (IsMemberTested(method)) { Console.WriteLine( " Member {0} is tested! " , method.Name); } else { Console.WriteLine( " Member {0} is NOT tested! " , method.Name); } } Console.WriteLine(); // display attributes for Order class DumpAttributes( typeof (Order)); // display attributes for methods on the Order class foreach (MethodInfo method in ( typeof (Order)).GetMethods()) { if (IsMemberTested(method)) { Console.WriteLine( " Member {0} is tested! " , method.Name); } else { Console.WriteLine( " Member {0} is NOT tested! " , method.Name); } } Console.WriteLine(); }}
转载于:https://www.cnblogs.com/renjuwht/archive/2010/02/22/1670836.html
