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类
{
///
/// 状态特性
///
///
public RemarkAttribute(string remark)//构造函数
{
this.Remark = remark;
}
public string Remark { get; private set; }//属性
}
四、使用特性
枚举值上使用特性
public enum UserState
{
///
/// 正常
///
[Remark("正常")]
Normal=0,
///
/// 冻结
///
[Remark("冻结")]
Frozen =1,
///
/// 删除
///
[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));