C# 是一种命令式语言但像所有命令式语言一样它具有某些声明性元素例如通过将类中的方法声明为 publicprotectedinternalprotected internal 或 private指定它的可访问性C# 使此功能一般化以便程序员可以创造出一种新的声明性信息将此声明性信息附加到各种程序实体并在运行时检索此声明性信息程序通过定义和使用属性(第 节)来描述这类额外的声明性信息
例如一个框架也许会定义一个可放置在程序元素(如类和方法)上的 HelpAttribute 属性使开发人员能够提供从程序元素到其文档的映射示例
using System;
[AttributeUsage(AttributeTargetsAll)]
public class HelpAttribute: Attribute
{
public HelpAttribute(string url) {
thisurl = url;
}
public string Topic = null;
private string url;
public string Url {
get { return url; }
}
}
定义了一个名为 HelpAttribute 的属性类它具有一个定位参数 (string url) 和一个命名参数 (string Topic)正如第 节中所解释的该属性可以通过它的完整名称 HelpAttribute 或通过它的隐式简称 Help 引用定位参数由该属性类的公共实例构造函数的形参定义命名参数则由属性类的公共非静态读写字段和对应的属性定义
示例
[Help()]
public class Class
{
[Help( Topic = F)]
public void F() {}
}
显示 Help 属性的几种用法
在运行时可以利用反射支持检索给定程序元素的属性信息示例
using System;
class Test
{
static void Main() {
Type type = typeof(Class);
object[] arr = typeGetCustomAttributes(typeof(HelpAttribute) true);
if (arrLength == )
ConsoleWriteLine(Class has no Help attribute);
else {
HelpAttribute ha = (HelpAttribute) arr[];
ConsoleWriteLine(Url = {} Topic = {} haUrl haTopic);
}
}
}
检查 Class 是否具有 Help 属性如果具有该属性则写出关联的 Topic 和 Url 值