更新:2007 年 11 月

属性可以放置在几乎所有的声明中(但特定的属性可能限制在其上有效的声明类型)。在语法上,属性的指定方法为:将括在方括号中的属性名置于其适用的实体声明之前。例如,具有 DllImport 属性的方法将声明如下:

C# 复制代码
[System.Runtime.InteropServices.DllImport("user32.dll")]
extern static void SampleMethod();

有关更多信息,请参见 DllImportAttribute 类

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

 复制代码
[DllImport("user32.dll")]
[DllImport("user32.dll", SetLastError=false, ExactSpelling=false)]
[DllImport("user32.dll", ExactSpelling=false, SetLastError=false)]

第一个参数(DLL 名称)是定位参数并且总是第一个出现,其他参数为命名参数。在这种情况下,两个命名参数均默认为 false,因此可将其省略。有关默认参数值的信息,请参考各个属性的文档。

在一个声明中可以放置多个属性,可分开放置,也可放在同一组括号中:

C# 复制代码
void MethodA([In][Out] ref double x) { }
void MethodB([Out][In] ref double x) { }
void MethodC([In, Out] ref double x) { }

某些属性对于给定实体可以指定多次。例如,Conditional 就是一个可多次使用的属性:

C# 复制代码
[Conditional("DEBUG"), Conditional("TEST1")]
void TraceMethod()
{
    // ...
}

说明:

根据约定,所有属性名称都以单词“Attribute”结束,以便将它们与“.NET Framework”中的其他项区分。但是,在代码中使用属性时不需要指定属性后缀。例如,[DllImport] 虽等效于 [DllImportAttribute],但 DllImportAttribute 才是该属性在 .NET Framework 中的实际名称。

请参见