在某些情况下,属性的目标(即属性适用于的实体)显得不明确。例如,在以下方法声明中,SomeAttr 属性可以适用于方法或方法的返回值:

C# CopyCode image复制代码
public class SomeAttr : System.Attribute { }

[SomeAttr]
int Method()
{
    return 0;
}

这种情况在封送处理时经常出现。为解析多义性,C# 对于每种声明都有一组默认目标,而通过显式指定属性目标可重写这些目标。

C# CopyCode image复制代码
// default: applies to method
[SomeAttr]
int Method1() { return 0; } 

// applies to method
[method: SomeAttr]
int Method2() { return 0; } 

// applies to return value
[return: SomeAttr]
int Method3() { return 0; } 

请注意,这与 SomeAttr 被定义为有效的目标无关;也就是说,即使 SomeAttr 被定义为只适用于返回值,也必须指定 return 目标。换言之,编译器将不使用 AttributeUsage 信息解析不明确的属性目标。有关更多信息,请参见 AttributeUsage(C# 编程指南)

属性目标的语法如下:

[target : attribute-list]

Expand 图像参数

Expand 图像示例

Expand image请参见