属性概述 (Visual Basic)

特性提供了一种强大的元数据或声明性信息与代码(程序集、类型、方法、属性等)相关联的方法。 将特性与程序实体相关联后,可以在运行时使用反射这项技术查询特性。 有关详细信息,请参阅反射(Visual Basic)。

属性具有以下属性:

  • 属性将元数据添加到程序。 元数据 是有关程序中定义的类型的信息。 所有 .NET 程序集都包含一组指定的元数据,用于描述程序集中定义的类型和类型成员。 可以添加自定义属性来指定所需的任何其他信息。 有关详细信息,请参阅“创建自定义属性”(Visual Basic)。

  • 可以将一个或多个属性应用于整个程序集、模块或较小的程序元素,例如类和属性。

  • 特性可以接受与方法和属性相同的参数。

  • 程序可以使用反射检查其自己的元数据或其他程序中的元数据。 有关详细信息,请参阅使用反射访问属性(Visual Basic)。

使用属性

属性可以放置在大多数任何声明上,但特定属性可能会限制其有效声明的类型。 在 Visual Basic 中,属性用尖括号括起来(<>)。 特性的后面必须紧接着应用它的元素,且两者必须位于同一代码行。

在此示例中,SerializableAttribute 属性用于将特定特征应用于类:

<System.Serializable()> Public Class SampleClass
    ' Objects of this type can be serialized.
End Class

具有特性 DllImportAttribute 的方法声明如下:

Imports System.Runtime.InteropServices
<System.Runtime.InteropServices.DllImport("user32.dll")>
Sub SampleMethod()
End Sub

可以在声明上放置多个属性:

Imports System.Runtime.InteropServices
Sub MethodA(<[In](), Out()> ByVal x As Double)
End Sub
Sub MethodB(<Out(), [In]()> ByVal x As Double)
End Sub

可以为给定实体多次指定某些属性。 此类多用属性的示例 ConditionalAttribute

<Conditional("DEBUG"), Conditional("TEST1")>
Sub TraceMethod()
End Sub

注释

按照约定,所有属性名称以“Attribute”一词结尾,以将它们与 .NET Framework 中的其他项区分开来。 但是,在代码中使用属性时,无需指定属性后缀。 例如,[DllImport] 等效于 [DllImportAttribute],但是 DllImportAttribute 是 .NET Framework 中属性的实际名称。

属性参数

许多属性具有参数,这些参数可以是有位置的、未命名的或命名的。 必须按特定顺序指定任何位置参数,并且不能省略;命名参数是可选的,可以按任意顺序指定。 首先指定位置参数。 例如,这三个属性等效:

<DllImport("user32.dll")>
<DllImport("user32.dll", SetLastError:=False, ExactSpelling:=False)>
<DllImport("user32.dll", ExactSpelling:=False, SetLastError:=False)>

第一个参数(DLL 名称)是位置参数,始终在最前面;其他参数是命名参数。 在这种情况下,两个命名参数默认为 false,因此可以省略它们。 有关默认参数值的信息,请参阅各个属性的文档。

特性目标

属性 的目标 是属性应用到的实体。 例如,特性可以应用于类、特定方法或整个程序集。 默认情况下,属性应用于其前面元素。 但是,还可以显式标识属性是应用于方法,还是应用于其参数,还是应用于其返回值。

若要显式标识属性目标,请使用以下语法:

<target : attribute-list>

下表显示了可能的 target 值列表。

目标值 适用于
assembly 整个程序集
module 当前程序集模块(与 Visual Basic 模块不同)

以下示例演示如何将属性应用于程序集和模块。 有关详细信息,请参阅通用属性(Visual Basic)。

Imports System.Reflection
<Assembly: AssemblyTitleAttribute("Production assembly 4"),
Module: CLSCompliant(True)>

特性的常见用途

以下列表包括代码中属性的一些常见用途:

  • 使用 Web 服务中的 WebMethod 属性标记方法,以指示该方法应该可通过 SOAP 协议调用。 有关详细信息,请参阅 WebMethodAttribute

  • 描述在与本机代码互操作时如何处理方法参数。 有关详细信息,请参阅 MarshalAsAttribute

  • 描述类、方法和接口的 COM 属性。

  • 使用 DllImportAttribute 类调用非托管代码。

  • 从标题、版本、说明或商标方面描述程序集。

  • 描述要序列化并暂留类的哪些成员。

  • 描述如何在类成员和 XML 节点之间进行映射,以便进行 XML 序列化。

  • 描述方法的安全要求。

  • 指定用于强制实施安全性的特征。

  • 通过实时 (JIT) 编译器控制优化,使代码更易于调试。

  • 获取方法调用方的相关信息。

有关详细信息,请参见:

另请参阅