【问题标题】:Custom vs. non-custom attributes?自定义与非自定义属性?
【发布时间】:2012-11-14 21:22:29
【问题描述】:

实现ICustomAttributeProvider 接口的东西将允许您通过GetCustomAttributes 方法获取已应用于它的自定义属性。据我了解,自定义属性基本上是一个特殊的类(以“属性”结尾并扩展Attribute 类),它被创建用于使用适当的语法([FooAttribute] 之前例如 C# 中的方法/类/等)。但如果这是一个自定义属性,什么是 non-custom 属性?我曾经认为与 .NET 捆绑在一起的属性是非自定义的,但 GetCustomAttributes 甚至会返回像 System.ThreadStaticAttribute 这样的属性,这是 .NET 框架的核心。

是否存在非自定义属性之类的东西,或者“自定义属性”只是重言式?

【问题讨论】:

    标签: c# .net custom-attributes


    【解决方案1】:

    从Attribute 派生的所有内容都是自定义属性。

    “属性”是一个通用术语。现实世界中的物体具有无数的属性。类、成员和参数都有我们可以描述的属性——名称、类型、访问器、成员数量、继承信息等。

    自定义属性是我们附加的东西——我们想要关联并用来描述的方面,但不是内在的。

    【讨论】:

      【解决方案2】:

      我不知道以下是否有任何相关性,但如果你说

      var a = typeof(string).Attributes;
      

      你会得到一个名为TypeAttributes 的标志枚举类型的值。也许这些标志是类型的“非自定义”属性?

      【讨论】:

      • 我认为这可能是正确的。自定义属性不是“类型属性”。
      • 为了更清楚,我刚刚在 MSDN 上阅读了此内容:“几乎所有反射类都可以具有与之关联的属性。属性可以是标准的(公共的、私有的、HelpString)或自定义的。”
      • 对此进行一些扩展,TypeAttributes、MethodAttributes、PropertyAttributes、FieldAttributes,也许还有更多是您可以通过各种 @ 找到的所有非自定义属性987654328@属性:Type.Attributes、MethodInfo.Attributes等
      【解决方案3】:

      参见Wikipedia,引用:

      开发人员可以通过属性将元数据添加到他们的代码中。那里 是两种类型的属性,自定义和伪自定义属性,以及 对开发人员来说,它们具有相同的语法。代码中的属性是 向编译器发送消息以生成元数据。在 CIL 中,元数据如 作为继承修饰符、作用域修饰符以及几乎任何 既不是操作码也不是流,也称为属性。

      另请参阅有关扩展元数据的 CLI 规范,其中可以找到对术语“自定义”属性的引用(例如 http://www.ecma-international.org/publications/files/ECMA-ST/ECMA-335.pdf 中的 I.9.7)

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-03-27
        • 1970-01-01
        • 2014-11-26
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-03-05
        相关资源
        最近更新 更多