zoukankan      html  css  js  c++  java
  • C#(99):属性 Attribute

    一、创建属性

    [AttributeUsage(AttributeTargets.Class | AttributeTargets.Constructor, AllowMultiple = true, Inherited = true)]
    //AttributeTargets:属性应用到的目标类型。AllowMultiple:是否允许一个元素应用多个此属性。Inherited:属性能否有派生类继承。
    public class CodeStatusAttribute : Attribute
    {
        private string status;
        public CodeStatusAttribute(string status)//构造函数为位置参数
        {
            this.status = status;
        }
        public string Tester { set; get; }//属性和公共字段为命名参数
        public string Coder { set; get; }
        
        public override string ToString()
        {
            return status;
        }
    }

    二、应用属性

    //1、使用单个属性
    [CodeStatus("a版")]
    public class Tringe
    { }
    
    //2、使用多个属性
    [CodeStatus("b版", Coder = "小李")]
    [CodeStatus("b版", Coder = "小王")]
    //也可以[CodeStatus("aa",Coder="小李"),CodeStatus("aa",Coder="小王")]
    public class Square
    { }
    
    //3、使用位置参数和命名参数
    //type表示此属性与什么元素关联,可能有:assembly,field,method,param,property,return,moudule,event,type等。。
    [type: CodeStatus("最终版", Coder = "小李", Tester = "老李")]
    public class Circle
    {
        [CodeStatus("最终版", Coder = "小李", Tester = "老李")]
        public Circle()
        {
    
        }
    }

    三、反射属性

    //1、获取类上的属性。
    Type t = typeof(Circle);
    Attribute[] attArr = Attribute.GetCustomAttributes(t, typeof(CodeStatusAttribute));
    //
    object[] attArr1 = t.GetCustomAttributes(typeof(CodeStatusAttribute), true);
    
    //2、获取成员上属性
    Attribute[] attArr3 = t.GetConstructors()[0].GetCustomAttributes().ToArray();//构造函数,获取字段GetField("..")
    
    //3、遍历
    foreach (Attribute attr in attArr3)
    {
        CodeStatusAttribute item = (CodeStatusAttribute)attr;
        Console.Write(item.ToString() + item.Coder + item.Tester);
    }

    四、Net内置属性

    [Condeitonal] //条件控制
    [Obsolete] //废弃属性
    [Serializable]//可序列化属性
    [AssemblyDelaySign] //程序集延迟签名
  • 相关阅读:
    Android 9.0版本及以上开发时遇到的一些版本问题
    【经典】半平面交求解方程组——poj1755
    【模板】凸包向内推进求不严格的半平面交——poj3384
    二分+半平面交——poj1279
    AngularJS 启程
    全栈工程师--这才是真正的从入门到跑路
    数据库学习路线-从入门到入土
    java学习路线-从入门到入土
    前端路线-从入门到入土
    前端小练习
  • 原文地址:https://www.cnblogs.com/springsnow/p/9433923.html
Copyright © 2011-2022 走看看