C#中的特性(Attribute)可以为代码添加元数据信息,这些元数据存储在程序集、类、方法、字段或者属性等级别上,可以在程序运行的时候被读取和使用。在本文中,将详细讲解C#中的特性,包括特性的定义、使用方法以及示例说明。
定义特性
在C#中,特性是一种自定义类型,它必须继承自System.Attribute
类。定义一个特性,需要在类的声明上使用[ ]
括起来的文本,作为特性标识符。同时,特性类内需要定义一些数据成员,这些数据成员被称为特性参数(Attribute Parameter)或者位置参数(Positional Parameter),用于存储特性信息。
示例1:定义特性
以下代码为定义一个特性MyAttribute
,包含了两个特性参数Name
和Age
:
[AttributeUsage(AttributeTargets.All, Inherited = false, AllowMultiple = true)]
sealed class MyAttribute : Attribute
{
readonly string name;
readonly int age;
public MyAttribute(string name, int age)
{
this.name = name;
this.age = age;
}
public string Name { get { return name; } }
public int Age { get { return age; } }
}
在上述代码中,请注意特性的定义语法:
- 用
[ ]
括起来的文本,作为特性标识符; - 继承自
System.Attribute
类; - 定义特性参数,这些参数使用构造函数被初始化。
使用特性
定义特性之后,就可以将它应用到代码中的各个地方。特性可以应用到程序集、类、方法、字段、属性、参数、事件等各个地方上。在应用特性时,需要在标识符后面带上一对()
,并且在其中填写特性参数的值。
示例2:应用特性
以下代码为应用一个特性MyAttribute
,标记在类Person
上:
[MyAttribute("John Doe", 42)]
class Person
{
// class implementation
}
在上述代码中,使用了特性MyAttribute
来标记一个名为Person
的类。特性的两个参数分别为"John Doe"
和42
。
读取特性
读取特性可帮助我们找到和理解代码中存储的元数据信息。在运行时,可以使用GetCustomAttributes
方法获取某个成员上的所有特性,也可以使用GetType
方法获取某个特性的类型。
示例3:读取特性
以下代码为读取类Person
上的特性MyAttribute
:
Type type = typeof(Person);
object[] attributes = type.GetCustomAttributes(typeof(MyAttribute), true);
MyAttribute myAttribute = (MyAttribute)attributes[0];
Console.WriteLine("Name: {0}, Age: {1}", myAttribute.Name, myAttribute.Age);
在上述代码中,首先使用typeof()
方法获取Person
这个类的Type
对象,随后调用GetCustomAttributes
方法读取Person
类上的特性MyAttribute
。返回的对象是一个object[]
,表示找到的所有这个特性的实例。需要通过这个object[]
获取具体的特性实例对象,在这个示例中只获取了第一个元素。最后输出特性实例的两个参数。
以上就是C#特性的完整攻略,希望对你有所帮助。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:C#特性(Attribute) - Python技术站