using System;
using System.Collections.Generic;
using System.Linq;
using System.Reflection;
using System.Text;
namespace ConsoleApplication1
{
//An enumeration of animals.Start at 1(0=uninitialized);
public enum Animal
{
//Pets
Dog=1,
Cat,
Bird,
}
//A custom attribute to allow a target to have a pet.
public class AnimalTypeAttribute : Attribute
{
//The constructor is called when the attirbute is set
public AnimalTypeAttribute(Animal pet)
{
thePet = pet;
}
//Keep a variable internally...
protected Animal thePet;
//..and show a copy to outside world.
public Animal Pet {
get { return thePet; }
set { thePet = value; }
}
}
//A test class where each method has its own pet
class AnimalTypeTestClass
{
[AnimalType(Animal.Dog)]
public void DogMethod(){}
[AnimalType(Animal.Cat)]
public void CatMethod(){}
[AnimalType(Animal.Bird)]
public void BirdMethod() { }
}
class DemoClass
{
static void Main(string[] args)
{
AnimalTypeTestClass testClass = new AnimalTypeTestClass();
Type type = testClass.GetType();
//Iterate through all the methods of class
foreach (MethodInfo mInfo in type.GetMethods()) //mInfo=Void DogMethod()
{
//Iterate through all the Attributes for each method
foreach (Attribute attr in Attribute.GetCustomAttributes(mInfo))//attr=ConsoleApplication1.AnimalTypeAttribute
{
//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.
*/
}
}
}
Console.ReadKey();
}
}
}