C#特性例子說明

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();

        }
    }
}


打印效果如下:
在這裏插入圖片描述
參考

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章