C#中的Attribute一

一、简介

特性(Attribute):相当于标签,贴上标签就产生了新功能。可以这样简单理解。

二、常见系统特性

  • [Required]
  • [Display(Name = "密码")]
  • [StringLength(100, ErrorMessage = "{0} 必须至少包含 {2} 个字符。", MinimumLength = 6)]
  • [DataType(DataType.Password)]
  • [Compare("Password", ErrorMessage = "密码和确认密码不匹配。")]
  • [DebuggerStepThrough]

三、定义特性

特性就是一个类,定义时需要继承Attribute

 [AttributeUsage(AttributeTargets.Field)]//限制特性只能应用于字段
    public class RemarkAttribute:Attribute//必须继承Attribute类
    {
        /// <summary>
        /// 状态特性
        /// </summary>
        /// <param name="remark"></param>
        public RemarkAttribute(string remark)//构造函数
        {
            this.Remark = remark;
        }
        public string Remark { get; private set; }//属性
    }

四、使用特性

枚举值上使用特性

 public enum UserState
    {
        /// <summary>
        /// 正常
        /// </summary>
        [Remark("正常")]
        Normal=0,
        /// <summary>
        /// 冻结
        /// </summary>
        [Remark("冻结")]
        Frozen =1,
        /// <summary>
        /// 删除
        /// </summary>
        [Remark("删除")]
        Deleted =2
    }

五、调用特性实现

 public class AttributeInvoke
    {
        public string GetRemark( UserState userState)
        {
            Type type = userState.GetType();
            var fileId = type.GetField(userState.ToString());
            if (fileId.IsDefined(typeof(RemarkAttribute),true))
            {
                RemarkAttribute remarkAttribute=(RemarkAttribute)fileId.GetCustomAttribute(typeof(RemarkAttribute), true);
                return remarkAttribute.Remark;
            }
            else
            {
                return userState.ToString();
            }
        }
    }

六、调用测试

   AttributeInvoke attributeInvoke = new AttributeInvoke();
   Console.WriteLine(attributeInvoke.GetRemark(userState));
posted @ 2022-03-29 10:16  码农阿亮  阅读(175)  评论(0编辑  收藏  举报