自定义属性与非自定义属性?

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

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

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

 var a = typeof(string).Attributes; 

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

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

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

自定义属性是我们要处理的事情 – 我们想要关联和用于描述的方面,但这些方面不是内在的。

参见维基百科 ,引用:

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

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