这个问题并不简单 :).
基本上,我需要知道从 Attribute.GetCustomAttributes()
方法系列中的任何一个方法返回的数组将包含什么内容。
肯定会有我定义的所有属性。但不仅仅是它们。例如,所有 Entity Framework 属性,比如 EdmScalarPropertyAttribute
,也会在其中。哪些属性不会被视为自定义属性?
这个问题并不简单 :).
基本上,我需要知道从 Attribute.GetCustomAttributes()
方法系列中的任何一个方法返回的数组将包含什么内容。
肯定会有我定义的所有属性。但不仅仅是它们。例如,所有 Entity Framework 属性,比如 EdmScalarPropertyAttribute
,也会在其中。哪些属性不会被视为自定义属性?
System.Attribute
派生并使用[AttributeName]
语法添加的属性都会出现。其中一些甚至是编译器自己添加的,例如out
关键字的OutAttribute
。
"自定义"一词将它们与直接内置于运行时的属性区分开来,例如成员/类型的可见性、方法是否为static
、virtual
或sealed
等。
例如,Type.Attributes
是一个TypeAttributes
类型的枚举,或者MethodBase.Attributes
对应于MethodAttributes
类型的枚举。这些不算作“自定义”。
关于[Serializable]
和内存布局,有一些奇怪的边角情况。
Essential C# 写道:
使
System.SerializableAttribute
不仅仅是自定义属性的特征之一,是CIL对可序列化类具有特殊头注释的事实。...
SerializableAttribute
转换为元数据表中的一组位。这使得SerializableAttribute
成为一个伪属性,即在元数据表中设置位或字段的属性。
GetCustomAttributes
方法方面,都存在差异。 - Michael Sagalovich