2024年5月10日发(作者:)

属性..........................................................................................................................................................................2

17.1

属性类

.........................................................................................................................................................2

17.1.1

属性用法

...............................................................................................................................................2

17.1.2定位和命名参数...................................................................................................................................3

17.1.3属性参数类型.......................................................................................................................................4

17.2属性专用化.................................................................................................................................................4

17.3属性实例.....................................................................................................................................................9

17.3.1属性的编译...........................................................................................................................................9

17.3.2

属性实例的运行时检索

.......................................................................................................................9

17.4

保留属性

.....................................................................................................................................................9

17.4.1AttributeUsage

属性

...........................................................................................................................10

17.4.2Conditional

属性

.................................................................................................................................10

17.4.2.1条件方法......................................................................................................................................10

17.4.2.2条件属性类..................................................................................................................................13

17.4.3Obsolete属性.....................................................................................................................................14

17.5交互操作的属性.......................................................................................................................................15

17.5.1与COM和Win32组件的交互操作.............................................................................................15

17.5.2

与其他

.NET

语言的交互操作

........................................................................................................15

17.5.2.1IndexerName

属性

.......................................................................................................................15

1.属性

C#语言的一个重要特征是使程序员能够为程序中定义的各种实体附加一些声明性信息。例如,类中方法的

可访问性是通过使用

method-modifiers

public

protected

internal

private

)加以修饰来指定

的。

C#使程序员可以创造新的声明性信息的种类,称为属性(attribute)。然后,程序员可以将这种属性附加到各

种程序实体,而且在运行时环境中还可以检索这些属性信息。例如,一个框架可以定义一个名为

HelpAttribute

的属性,该属性可以放在某些程序元素(如类和方法)上,以提供从这些程序元素到其文

档说明的映射。

属性是通过属性类(第17.1节)的声明定义的,属性类可以具有定位和命名参数(第17.1.2节)。属性是使

用属性规范(第17.2节)附加到C#程序中的实体上的,而且可以在运行时作为属性实例(第17.3节)检

索。

1.1属性类

从抽象类

ute

派生的类(不论是直接的还是间接的)都称为属性类(attributeclass)。一个

关于属性类的声明定义一种新属性(attribute),它可以被放置在其他声明上。按照约定,属性类的名称均带有

Attribute

后缀。使用属性时可以包含或省略此后缀。

1.1.1

属性用法

属性

AttributeUsage

(第17.4.1节)用于描述使用属性类的方式。

,该参数使属性类能够指定自己可以用在那种声明上。

AttributeUsage

具有一个定位参数(第17.1.2节)

在以下示例中:

usingSystem;

[AttributeUsage(|ace)]

publicclassSimpleAttribute:Attribute

{

...

}

定义了一个名为

SimpleAttribute

的属性类,此属性类只能放在

class-declaration

interface-declaration

上。在以下示例中:

[Simple]classClass1{...}

[Simple]interfaceInterface1{...}

演示了

Simple

属性的几种用法。虽然此属性是用名称

SimpleAttribute

定义的,但在使用时可以省略

Attribute

后缀,从而得到简称

Simple

。因此,上例在语义上等效于:

[SimpleAttribute]classClass1{...}

[SimpleAttribute]interfaceInterface1{...}