自定义特性
[AttributeUsage(AttributeTargets.Field|AttributeTargets.Class, Inherited = true, AllowMultiple = true)]
public class MyAttribute:Attribute
{
    public int Index;

    public MyAttribute(int index)
    {
        Index = index;
    }
}

[My(250)]//特性允许类和属性的使用
class Class1
{
    [My(0)][My(1)]//AllowMultiple允许多个
    public int A;
    [My(2)]
    public bool B;
}

class Class2 : Class1
{
    //Inherited允许类继承特性内容,false时不会有Class1的特性
}

static void Main(string[] args)
{
    //通过反射获取特性的类容,根据实际需要做不同处理
    Type t = typeof(Class1);
    MyAttribute attribute = t.GetCustomAttribute(typeof(MyAttribute)) as MyAttribute;
    Console.WriteLine("Class1的特性Index:" + attribute.Index);

    FieldInfo[] fieldInfos = t.GetFields();

    foreach (var i in fieldInfos)
    {
        object[] mys = i.GetCustomAttributes(false);
        foreach (var j in mys)
        {
            MyAttribute my = j as MyAttribute;
            Console.WriteLine(i.Name + "的特性Index:" + my.Index);
        }
    }

    Console.WriteLine();Console.WriteLine("继承的类也有特性");
    t = typeof(Class2);
    attribute = t.GetCustomAttribute(typeof(MyAttribute)) as MyAttribute;
    Console.WriteLine("Class2的特性Index:" + attribute.Index);

    fieldInfos = t.GetFields();

    foreach (var i in fieldInfos)
    {
        object[] mys = i.GetCustomAttributes(false);
        foreach (var j in mys)
        {
            MyAttribute my = j as MyAttribute;
            Console.WriteLine(i.Name + "的特性Index:" + my.Index);
        }
    }

    Console.ReadKey();
}


都挺简单的,解析看注释,输出:

TIM图片20180519104745.png


首页 我的博客
粤ICP备17103704号