[property: Obsolete]
static int X
{
get { return 42; }
}
在上面的代码中,“财产”一词的目的是什么?如果我将[属性:已过时]替换为[已过时],则代码似乎以相同的方式工作。而且,尽管“属性”在Visual Studio中显示为蓝色,但它不会出现在C#关键字列表中: https://docs.microsoft.com/en-us/dotnet/csharp/language-reference/keywords/
答案 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
在自定义属性上设置允许的目标。