Csharp/C Sharp/Reflection/Attributes
Attributes:Reflecting on Attributes
<source lang="csharp"> using System; using System.Reflection; public class AttributesReflectingonAttributes {
public static void Main() { Type type = typeof(Complex); foreach (CodeReviewAttribute att in type.GetCustomAttributes(typeof(CodeReviewAttribute), false)) { Console.WriteLine("Reviewer: {0}", att.Reviewer); Console.WriteLine("Date: {0}", att.Date); Console.WriteLine("Comment: {0}", att.rument); } }
} [AttributeUsage(AttributeTargets.Class, AllowMultiple=true)] public class CodeReviewAttribute: System.Attribute {
public CodeReviewAttribute(string reviewer, string date) { this.reviewer = reviewer; this.date = date; } public string Comment { get { return(comment); } set { comment = value; } } public string Date { get { return(date); } } public string Reviewer { get { return(reviewer); } } string reviewer; string date; string comment;
}
[CodeReview("AA", "01-12-2000", Comment="Joe" Code")] [CodeReview("BB", "01-01-2000", Comment="Revisit this section")] class Complex { }
</source>
Displaying attributes for a class.
<source lang="csharp">
using System; using System.Reflection; [AttributeUsage(AttributeTargets.Class | AttributeTargets.Struct)] public class Creator : System.Attribute {
public Creator(string name, string date) { this.name = name; this.date = date; version = 0.1; } public void Dump() { Console.WriteLine("Name {0}", name); Console.WriteLine("Date {0}", date); Console.WriteLine("Version {0}", version); } string date; string name; public double version;
} [Creator("A", "01/01/2008", version = 1.1)] class ATestClass1 {
ATestClass1() { }
} [Creator("B", "04/01/2008", version = 1.5)] class ATestClass2 {
ATestClass2() { }
} [Creator("C", "12/31/2008", version = 2.5)] class ATestClass3 {
ATestClass3() { }
}
class MainClass {
public static void PrintAttributeInformation(Type classType) { Console.WriteLine("Attributes for class {0}", classType); object[] attr = classType.GetCustomAttributes(true); foreach (object o in attr) { Console.WriteLine("Attribute {0}", o); if (o is Creator) ((Creator)o).Dump(); } } public static void Main() { PrintAttributeInformation(typeof(ATestClass1)); PrintAttributeInformation(typeof(ATestClass2)); PrintAttributeInformation(typeof(ATestClass3)); }
}
</source>
Use GetCustomAttribute
<source lang="csharp"> using System; using System.Reflection;
class Starter {
static void Main() { Type tObj = typeof(Starter); MethodInfo method = tObj.GetMethod("AMethod"); Attribute attrib = Attribute.GetCustomAttribute(method, typeof(ObsoleteAttribute)); ObsoleteAttribute obsolete = (ObsoleteAttribute)attrib; Console.WriteLine("Obsolete Message: " + obsolete.Message); } [Obsolete("Deprecated function.", false)] public void AMethod() { }
}
</source>