CSDN广告是越来越多了,所有博客笔记不再更新,新网址 DotNet笔记
Attribute 类将预定义的系统信息或用户定义的自定义信息与目标元素相关联。目标元素可以是程序集、类、构造函数、委托、枚举、事件、字段、接口、方法、可移植可执行文件模块、参数、属性 (Property)、返回值、结构或其他属性 (Attribute)。属性所提供的信息也称为元数据。元数据可由应用程序在运行时进行检查以控制程序处理数据的方式,也可以由外部工具在运行前检查以控制应用程序处理或维护自身的方式。例如,.NET Framework 预定义属性类型并使用属性类型控制运行时行为,某些编程语言使用属性类型表示 .NET Framework 公共类型系统不直接支持的语言功能。
所有属性类型都直接或间接地从 Attribute 类派生。属性可应用于任何目标元素;多个属性可应用于同一目标元素;并且属性可由从目标元素派生的元素继承。使用 AttributeTargets 类可以指定属性所应用到的目标元素。
例子:
/// <summary>
/// 定义一个Attribute类,作用域为字段(tips:可以是枚举的字段,也可以是类的字段)
/// </summary>
[AttributeUsage(AttributeTargets.Field)]
public class EnumDisplayName : Attribute
{
public string displayName;
}
/// <summary>
/// 定义一个测试枚举
/// </summary>
public enum TestEnum
{
[EnumDisplayName(displayName = "第1个")]
One,
[EnumDisplayName(displayName = "第2个")]
Two,
[EnumDisplayName(displayName = "第3个")]
Three
}
然后我们定义一个方法用来获取displayName
/// <summary>
/// 获取枚举TestEnum的displayName
/// </summary>
/// <param name="oa">枚举项</param>
/// <returns>枚举项的displayName</returns>
public static string GetOperatorActions(TestEnum oa)
{
string disName = "";
Type type = oa.GetType();
string name = Enum.GetName(type, oa);
FieldInfo field = type.GetField(name);
EnumDisplayName attribute = Attribute.GetCustomAttribute(field, typeof(EnumDisplayName)) as EnumDisplayName;
disName = attribute == null ? null : attribute.displayName;
return disName;
}
测试一下:
static void Main(string[] args)
{
//遍历枚举
foreach (TestEnum suit in Enum.GetValues(typeof(TestEnum)))
{
GetOperatorActions(suit);
Console.WriteLine((int)suit + " " + GetOperatorActions(suit) + ":" + suit.ToString());
}
}