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));
本文来自博客园,作者:码农阿亮,转载请注明原文链接:https://www.cnblogs.com/wml-it/p/16070442.html
技术的发展日新月异,随着时间推移,无法保证本博客所有内容的正确性。如有误导,请大家见谅,欢迎评论区指正!
开源库地址,欢迎点亮:
GitHub:https://github.com/ITMingliang
Gitee: https://gitee.com/mingliang_it
GitLab: https://gitlab.com/ITMingliang
建群声明: 本着技术在于分享,方便大家交流学习的初心,特此建立【编程内功修炼交流群】,为大家答疑解惑。热烈欢迎各位爱交流学习的程序员进群,也希望进群的大佬能不吝分享自己遇到的技术问题和学习心得!进群方式:扫码关注公众号,后台回复【进群】。