“属性”在此属性上是什么意思?

时间:2019-01-18 13:12:04

标签: c# properties attributes

[property: Obsolete]
static int X
{
    get { return 42; }
}

在上面的代码中,“财产”一词的目的是什么?如果我将[属性:已过时]替换为[已过时],则代码似乎以相同的方式工作。而且,尽管“属性”在Visual Studio中显示为蓝色,但它不会出现在C#关键字列表中: https://docs.microsoft.com/en-us/dotnet/csharp/language-reference/keywords/

2 个答案:

答案 0 :(得分:1)

Attribute specification将此定义为attribute target

  

某些上下文允许指定一个以上的属性   一个目标。程序可以通过包含以下内容来明确指定目标   attribute_target_specifier。当属性放置在   全局级别,则需要global_attribute_target_specifier。在所有   其他位置,则采用合理的默认值,但   attribute_target_specifier可用于确认或覆盖   在某些模棱两可的情况下默认(或仅在   无歧义的情况)。

它还指出,在许多情况下,例如您提到的情况,这是允许的,但不是必须的。

  

在其他情况下,包含attribute_target_specifier是   允许但不必要。例如,一个类声明可能   包括或省略说明符类型。

答案 1 :(得分:1)

这是attribute target specification

在您的代码中实际上并没有必要使用它,因为在该位置该属性只有一个允许的目标。 Obsolete属性可以放在类型,方法或属性上,但是如果放在属性上,则仅允许property目标说明符(并隐式使用)。

最实际的用途是assembly目标说明符,您可以在其中通过属性设置程序集配置:

[assembly: AssemblyProduct("Foo bar")]

您可以使用AttributeUsage在自定义属性上设置允许的目标。