如何:提供关于组件的元数据说明

可以通过 attributes 提供关于组件的描述性元数据。 特性是应用于代码元素的专用类。 在编译时,特性被发送到元数据中,而这些元数据可通过 System.Reflection 命名空间用于公共语言运行时或用于自定义工具和应用程序。

特性附加到组件的方法是在组件的前面放置一个特性引用,并提供任何相关的参数或标志。 此构造函数调用在 Visual Basic 中放在尖括号 <> 中,在 C# 中放在方括号 [] 中。

按照约定,所有特性类都以“Attribute”结尾。例如,DescriptionAttributeObsoleteAttributeBrowsableAttribute 类。 然而,若干以公共语言运行时为目标的语言(包括 Visual Basic 和 C#)不要求特性的全名。 例如,ObsoleteAttribute 在代码中可以被称为 Obsolete。

将现有特性附加到组件

  1. 确定组件需要哪些特性。

  2. 将这些特性附加到组件。 注意必须或者使用完全限定的特性名,或者添加适当的 Imports (using) 语句。 下面的示例显示如何附加 DescriptionAttribute 特性:

    Imports System.ComponentModel
    <Description("This is a description string")> Public Class TheClass
    End Class
    
    using System.ComponentModel;
    [Description("This is a description string")]
    public class TheClass
    {
    }
    

自定义特性

还可以通过从 Attribute 继承来创建自己的要用于自定义工具或应用程序的特性。 可以向这个基类中添加应用程序所需的任何自定义属性或方法。

创建并应用自定义特性

  1. 创建一个从 Attribute 继承的类。

    Public Class WidgetAttribute
       Inherits System.Attribute
    End Class
    
    public class WidgetAttribute: System.Attribute
    {
    }
    
  2. 确定特性需要哪些属性和方法并为它们编写代码。 下面的示例显示如何创建一个 WidgetType 属性,该属性在 WidgetAttribute 类的构造函数中进行设置。 AttributeUsageAttribute 特性设置特性能够以什么代码成员为目标。

    <AttributeUsage(System.AttributeTargets.Class)> Public Class _
       WidgetAttribute
       Inherits System.Attribute
       Private mWidgetType as WidgetTypeEnum
       ' Creates a readonly property for the WidgetAttribute class.
       Public ReadOnly Property WidgetType as WidgetTypeEnum
          Get
             Return mWidgetType
          End Get
       End Property
       ' Creates a constructor that accepts a parameter and assigns the 
       ' value of that parameter to the WidgetType property.
       Public Sub New(type as WidgetTypeEnum)
          MyBase.New()
          mWidgetType = type
       End Sub
    End Class
    
    [AttributeUsage(System.AttributeTargets.Class)]
    public class WidgetAttribute: System.Attribute
    {
       private WidgetTypeEnum widgetType;
    
       // Creates a readonly property for the WidgetAttribute class.
       public WidgetTypeEnum WidgetType
          {
             get {return widgetType;}
          }
    
       public WidgetAttribute(WidgetTypeEnum type): base()
          {
             widgetType = type;
          }
    }
    
  3. 像对待任何其他特性那样应用此特性,确保应用任何所需的参数。

    <WidgetAttribute(WidgetTypeEnum.VerticalWidget)> _
       Public Class WidgetFortyFive
    End Class
    
    [WidgetAttribute(WidgetTypeEnum.VerticalWidget)]
    public class WidgetFortyFive
    {
    }
    

请参见

任务

如何:为组件的属性、方法和事件提供元数据

参考

Attribute

概念

访问自定义特性

检索存储在特性中的信息

其他资源

组件的用户支持