اتربیوتها هم در واقع یه سری کلاس هستن که فقط از کلاس Attribute مشتق شدن، به همین دلیل می تونن به همون صورتی که میبینی استفاده بشن. معمولا کمتر پیش میاد که توی یه برنامه بخوای خودت یه اتربیوت بنویسی.
در هر صورت این کد یه مثال برای نوشتن اتربیوت و استفاده از اونه:
using System;
using System.Reflection;
namespace CustomAttrCS
{
// An enumeration of animals. Start at 1 (0 = uninitialized).
public
enumAnimal
{
// 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 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
{
static void 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.
*/
خواستی لینک زیر رو ببین، در این مورد توضیح داده:
http://msdn2.microsoft.com/en-US/lib...te(VS.80).aspx