创建自定义属性(C# 编程指南)

更新: 2008 年 7 月

通过定义一个属性类,可以创建您自己的自定义属性。该属性类直接或间接地从 Attribute 派生,有助于方便快捷地在元数据中标识属性定义。假设您要用编写类或结构的程序员的名字标记类和结构。可以定义一个自定义 Author 属性类:

[System.AttributeUsage(System.AttributeTargets.Class |
                       System.AttributeTargets.Struct)
]
public class Author : System.Attribute
{
    private string name;
    public double version;

    public Author(string name)
    {
        this.name = name;
        version = 1.0;
    }
}

类名是属性名 Author。它由 System.Attribute 派生而来,因此是自定义属性类。构造函数的参数是自定义属性的定位参数(在本例中为 name),任何公共读写字段或属性都是命名参数(在本例中,version 是唯一的命名参数)。请注意 AttributeUsage 属性的用法,它使得 Author 属性仅在 class 和 struct 声明中有效。

可以按如下所示使用此新属性:

[Author("H. Ackerman", version = 1.1)]
class SampleClass
{
    // H. Ackerman's code goes here...
}

AttributeUsage 有一个命名参数 AllowMultiple,使用它可以使自定义属性成为一次性使用或可以使用多次的属性。

[System.AttributeUsage(System.AttributeTargets.Class |
                       System.AttributeTargets.Struct,
                       AllowMultiple = true)  // multiuse attribute
]
public class Author : System.Attribute
[Author("H. Ackerman", version = 1.1)]
[Author("M. Knott", version = 1.2)]
class SampleClass
{
    // H. Ackerman's code goes here...
    // M. Knott's code goes here...
}
说明:

如果属性 (Attribute) 类包含一个属性 (Property),则该属性 (Property) 必须为读写属性。在 C# 的属性 (Attribute) 类中只写属性 (Property) 不受支持。

请参见

概念

C# 编程指南

参考

反射(C# 编程指南)

属性(C# 编程指南)

使用属性(C# 编程指南)

消除属性目标的歧义性(C# 编程指南)

使用反射访问属性(C# 编程指南)

System.Reflection

修订记录

日期

历史记录

原因

2008 年 7 月

添加了有关属性支持的说明。

内容 Bug 修复