2012-11-14 278 views
8

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

有没有这样的事情作为非自定义属性,或者是“自定义属性”只是一个重言式?

回答

2

我不知道下面有任何关联的CLI规范,但如果你说

var a = typeof(string).Attributes; 

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

+0

我认为这可能是正确的。自定义属性是不是“类型属性”的东西。 – Jez

+0

有关更多说明,我只是在MSDN上阅读:*“几乎所有Reflection类都可以具有与它们相关的属性,属性可以是标准(公共,私有,HelpString)或自定义。”* – Jez

5

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

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

定制属性都是我们粘性上 - 方面我们想要联想和用来描述,但哪些不是固有的。

2

Wikipedia,报价:

开发人员可以通过属性来他们的代码添加元数据。 是属性的两种类型,自定义属性和伪自定义属性,并且这些开发者具有相同的语法。代码中的属性是 消息给编译器以生成元数据。在CIL中,元数据(例如 )作为继承修饰符,范围修饰符以及几乎任何不是操作码或流的任何东西,也称为属性。

参见有关扩展元数据,其中引用发现了“定制”一词属性(例如I.9.7在http://www.ecma-international.org/publications/files/ECMA-ST/ECMA-335.pdf