/* C#: The Complete Reference by Herbert Schildt Publisher: Osborne/McGraw-Hill (March 8, 2002) ISBN: 0072134852 */ // Use a property as a named attribute parameter. using System; using System.Reflection; [AttributeUsage(AttributeTargets.All)] class RemarkAttribute : Attribute { string remarkValue; // underlies remark property int pri_priority; // underlies priority property public string supplement; // this is a named parameter public RemarkAttribute(string comment) { remarkValue = comment; supplement = "None"; } public string remark { get { return remarkValue; } } // Use a property as a named parameter. public int priority { get { return pri_priority; } set { pri_priority = value; } } } [RemarkAttribute("This class uses an attribute.", supplement = "This is additional info.", priority = 10)] class UseAttrib { // ... } public class NamedParamDemo11 { public static void Main() { Type t = typeof(UseAttrib); Console.Write("Attributes in " + t.Name + ": "); object[] attribs = t.GetCustomAttributes(false); foreach(object o in attribs) { Console.WriteLine(o); } // Retrieve the RemarkAttribute. Type tRemAtt = typeof(RemarkAttribute); RemarkAttribute ra = (RemarkAttribute) Attribute.GetCustomAttribute(t, tRemAtt); Console.Write("Remark: "); Console.WriteLine(ra.remark); Console.Write("Supplement: "); Console.WriteLine(ra.supplement); Console.WriteLine("Priority: " + ra.priority); } }