using System; using System.Reflection; namespace CustomAttrCS { // An enumeration of animals. Start at 1 (0 = uninitialized). publicenum Animal { // Pets. Dog =1, Cat, Bird, } // A custom attribute to allow a target to have a pet. publicclass AnimalTypeAttribute : Attribute { // The constructor is called when the attribute is set. public AnimalTypeAttribute(Animal pet) { thePet = pet; } // Keep a variable internally protected Animal thePet; // .. and show a copy to the outside world. public Animal Pet { get{ return thePet; } set{ thePet = Pet; } } } // A test class where each method has its own pet. class AnimalTypeTestClass { [AnimalType(Animal.Dog)] publicvoid DogMethod() {} [AnimalType(Animal.Cat)] publicvoid CatMethod() {} [AnimalType(Animal.Bird)] publicvoid BirdMethod() {} } class DemoClass { staticvoid Main(string[] args) { AnimalTypeTestClass testClass =new AnimalTypeTestClass(); Type type = testClass.GetType(); // Iterate through all the methods of the class. foreach(MethodInfo mInfo in type.GetMethods()) { // Iterate through all the Attributes for each method. foreach (Attribute attr in Attribute.GetCustomAttributes(mInfo)) { // Check for the AnimalType attribute. if (attr.GetType() ==typeof(AnimalTypeAttribute)) Console.WriteLine( "Method {0} has a pet {1} attribute.", mInfo.Name, ((AnimalTypeAttribute)attr).Pet); } } } } } /**//* * Output: * Method DogMethod has a pet Dog attribute. * Method CatMethod has a pet Cat attribute. * Method BirdMethod has a pet Bird attribute. */