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

        }
    }
}


打印效果如下:
在这里插入图片描述
参考

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值