C#特性例子说明
using System;
using System.Reflection;
namespace 特性_Attribute
{
// An enumiration of animals
public enum Animal
{
Dog=1,
Cat,
Bird,
}
// A custom Attribute to allow a target to have a pet
public class AnimalTypeAttribute:Attribute
{
// keep a variable interaly
internal Animal thePet;
// ... and show a copt to the outside world
public Animal Pet
{
get { return thePet; }
set { thePet = value; }
}
// The constructor is called when the attribute is set
public AnimalTypeAttribute(Animal pet)
{
thePet = pet;
}
}
// 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 Program
{
static void Main(string[] args)
{
AnimalTypeTestClass testClass = new AnimalTypeTestClass();
Type type = testClass.GetType();
// Iterate all the methods of the class
foreach(MethodInfo methodInfo in type.GetMethods())
{
// Iterate through all the Attributes for each method
foreach(Attribute attr in Attribute.GetCustomAttributes(methodInfo) )
{
// Check for the AnimalType attribute
if(attr.GetType().Equals(typeof(AnimalTypeAttribute)))
{
Console.WriteLine($"Method{methodInfo.Name}has a pet {((AnimalTypeAttribute)attr).Pet}");
}
}
}
Console.ReadKey();
}
}
}
打印效果如下:
参考