自定义与非自定义属性?

时间:2012-11-14 21:22:29

标签: c# .net custom-attributes

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

是否存在非自定义属性,或“自定义属性”只是一个重言式?

3 个答案:

答案 0 :(得分:6)

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

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

自定义属性是我们上添加的东西 - 我们希望关联和用于描述但不是内在的方面。

答案 1 :(得分:2)

请参阅Wikipedia,引用:

  

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

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

答案 2 :(得分:2)

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

var a = typeof(string).Attributes;

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