• 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] //程序集延迟签名
  • 相关阅读:
    unbuntu下安装flash插件
    ssh命令:使用密钥文件进行登陆
    eclipse关掉jsp,js的语法验证
    spring源码学习之:xml标签扩展配置例子
    spring源码学习之:xml配置文件标签自定义
    java多线程之:线程对象一些api
    java多线程之:Java中的ReentrantLock和synchronized两种锁定机制的对比 (转载)
    Spring Cloud(十):服务网关zuul(转)
    数据库连接池dbcp和c3po的区别
    springboot数据库连接池使用策略
  • 原文地址:https://www.cnblogs.com/springsnow/p/9433923.html
Copyright © 2020-2023  润新知