C# Attribute(特性)

使用特性,可以有效地将元数据或声明性信息与代码(程序集、类型、方法、属性等)相关联。 将特性与程序实体相关联后,可以在运行时使用 反射 这项技术查询特性。

特性向程序添加元数据。 元数据 是程序中定义的类型的相关信息。 所有 .NET 程序集都包含一组指定的元数据,用于描述程序集中定义的类型和类型成员。 可以添加自定义特性来指定所需的其他任何信息。

特性的使用

.NET Core和.NET FrameWork中已经内置了大量可直接使用的特性。

特性可以在程序集、类型、方法、属性,参数上面指定。通过用方括号 ([]) 将特性名称括起来,并置于应用该特性的实体的声明上方以指定特性。

[HttpPost]
public IAction Save(Product [FromBody]product)
{
    ....
}

如上代码经常在一个.NET Core MVC的应用中见到,[HttpPost]作用于方法上,表示该方法只处理Post请求,[FromBody]作用于参数product上,表示只接收来自Body的数据。

特性通常还接受一个或多个参数。

对于给定实体,一些特性可以指定多次。 ConditionalAttribute 便属于此类多用途特性:

[Conditional("DEBUG"), Conditional("TEST1")]
void TraceMethod()
{
    // ...
}

按照约定,所有特性名称均以“Attribute”一词结尾,以便与 .NET 库中的其他项区分开来。 不过,在代码中使用特性时,无需指定特性后缀。 例如,[DllImport] 等同于 [DllImportAttribute],但 DllImportAttribute 是此特性在 .NET 类库中的实际名称。