如何:提供关于组件的元数据说明
可以通过 attributes 提供关于组件的描述性元数据。 特性是应用于代码元素的专用类。 在编译时,特性被发送到元数据中,而这些元数据可通过 System.Reflection 命名空间用于公共语言运行时或用于自定义工具和应用程序。
特性附加到组件的方法是在组件的前面放置一个特性引用,并提供任何相关的参数或标志。 此构造函数调用在 Visual Basic 中放在尖括号 <> 中,在 C# 中放在方括号 [] 中。
按照约定,所有特性类都以“Attribute”结尾。例如,DescriptionAttribute、ObsoleteAttribute 和 BrowsableAttribute 类。 然而,若干以公共语言运行时为目标的语言(包括 Visual Basic 和 C#)不要求特性的全名。 例如,ObsoleteAttribute 在代码中可以被称为 Obsolete。
将现有特性附加到组件
确定组件需要哪些特性。
将这些特性附加到组件。 注意必须或者使用完全限定的特性名,或者添加适当的 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 继承来创建自己的要用于自定义工具或应用程序的特性。 可以向这个基类中添加应用程序所需的任何自定义属性或方法。
创建并应用自定义特性
创建一个从 Attribute 继承的类。
Public Class WidgetAttribute Inherits System.Attribute End Class
public class WidgetAttribute: System.Attribute { }
确定特性需要哪些属性和方法并为它们编写代码。 下面的示例显示如何创建一个 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; } }
像对待任何其他特性那样应用此特性,确保应用任何所需的参数。
<WidgetAttribute(WidgetTypeEnum.VerticalWidget)> _ Public Class WidgetFortyFive End Class
[WidgetAttribute(WidgetTypeEnum.VerticalWidget)] public class WidgetFortyFive { }