8

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

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

4

3 回答 3

6

派生自的一切都是Attribute自定义属性。

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

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

于 2012-11-14T21:39:50.393 回答
2

参见维基百科,引用:

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

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

于 2012-11-14T21:40:19.433 回答
2

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

var a = typeof(string).Attributes;

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

于 2012-11-14T22:01:11.713 回答