Attribute

Attribute

 

The Attribute class associates predefined system information or user-defined custom information with a target element. A target element can be an assembly, class, constructor, delegate, enum, event, field, interface, method, portable executable file module, parameter, property, return value, struct, or another attribute.


Information provided by an attribute is also known as metadata. Metadata can be examined at run time by your application to control how your program processes data, or before run time by external tools to control how your application itself is processed or maintained. For example, the .NET Framework predefines and uses attribute types to control run-time behavior, and some programming languages use attribute types to represent language features not directly supported by the .NET Framework common type system.


All attribute types derive directly or indirectly from the Attribute class. Attributes can be applied to any target element; multiple attributes can be applied to the same target element; and attributes can be inherited by an element derived from a target element. Use the AttributeTargets class to specify the target element to which the attribute is applied.


The Attribute class provides convenient methods to retrieve and test custom attributes. For more information about using attributes, see Applying Attributes and Extending Metadata Using Attributes.

 

namespace AttributeDemo
{
    public enum Animal
    {
        Dog = 1,
        Cat,
        Bird
    }
}
using System;

namespace AttributeDemo
{
    class AnimalTypeAttribute : Attribute
    {
        public AnimalTypeAttribute(Animal animal)
        {
            pet = animal;
        }

        protected Animal pet;
        public Animal Pet
        {
            get { return pet; }
            set { pet = value; }
        }
    }
}
using System;

namespace AttributeDemo
{
    class AnimalTypeTest
    {
        [AnimalType(Animal.Dog)]
        public void DogMethod()
        { }

        [AnimalType(Animal.Cat)]
        public void CatMethod()
        { }

        [AnimalType(Animal.Bird)]
        public void BirdMethod()
        { }
    }
}
using System;
using System.Reflection;

namespace AttributeDemo
{
    class Program
    {
        static void Main(string[] args)
        {
            AnimalTypeTest animalTypeTest = new AnimalTypeTest();
            Type type = animalTypeTest.GetType();

            MethodInfo[] methodInfoArray = type.GetMethods();
            foreach (MethodInfo item in methodInfoArray)
            {
                Attribute[] attributeArray = Attribute.GetCustomAttributes(item);
                foreach (Attribute item1 in attributeArray)
                {
                    AnimalTypeAttribute animalTypeAttribute = item1 as AnimalTypeAttribute;
                    if (animalTypeAttribute != null)
                    {
                        Console.WriteLine(string.Format("{0} {1}", item.Name, animalTypeAttribute.Pet));
                    }
                }
            }
            Console.ReadLine();
        }
    }
}

 

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值