【问题标题】:What does "property" mean on this attribute?这个属性的“属性”是什么意思?
【发布时间】:2019-06-12 18:20:12
【问题描述】:
[property: Obsolete]
static int X
{
    get { return 42; }
}

在上面的代码中,“属性”这个词有什么作用?如果我将 [property: Obsolete] 替换为 [Obsolete],代码的工作方式似乎相同。尽管“属性”在 Visual Studio 中是蓝色的,但它并没有出现在 C# 关键字列表中: https://docs.microsoft.com/en-us/dotnet/csharp/language-reference/keywords/

【问题讨论】:

    标签: c# properties attributes


    【解决方案1】:

    这是attribute target specification

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

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

    [assembly: AssemblyProduct("Foo bar")]
    

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

    【讨论】:

      【解决方案2】:

      Attribute specification 将此定义为attribute target

      某些上下文允许在超过 一个目标。程序可以通过包含显式指定目标 一个属性目标说明符。当一个属性被放置在 全局级别,需要一个 global_attribute_target_specifier。在所有 其他位置,应用合理的默认值,但 attribute_target_specifier 可用于确认或覆盖 在某些模棱两可的情况下默认(或只是确认默认情况下 非模棱两可的情况)。

      它还指出,在许多情况下,就像你提到的那样,它是允许的,但不是必需的。

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

      【讨论】:

        猜你喜欢
        • 2019-09-13
        • 1970-01-01
        • 1970-01-01
        • 2014-10-23
        • 1970-01-01
        • 2016-04-06
        • 2016-06-07
        • 1970-01-01
        • 2018-12-10
        相关资源
        最近更新 更多