问题不是那么简单:)。
基本上,我需要知道的是将从Attribute.GetCustomAttributes()
方法族中的任何方法返回的数组中包含的内容。
当然,我定义的所有属性都将存在。但是,不仅仅是他们。例如,所有实体框架属性(如EdmScalarPropertyAttribute
)也都存在。什么属性不会被视为自定义?
答案 0 :(得分:6)
几乎每个从System.Attribute
派生并添加了[AttributeName]
语法的属性都会存在。其中一些甚至由编译器本身添加,例如OutAttribute
关键字的out
。
“custom”一词将它们与直接构建到运行时的属性区分开来,例如成员/类型的可见性,方法static
,virtual
或sealed
等等。
例如,Type.Attributes
是TypeAttributes
类型的枚举,或MethodBase.Attributes
对应MethodAttributes
枚举。那些不算“习惯”。
关于[Serializable]
和内存布局,有一些奇怪的极端情况。
基本C#writes:
然而,使
System.SerializableAttribute
不仅仅是自定义属性的一个特征是CIL对可序列化类具有特殊的标题符号。...
SerializableAttribute
转换为元数据表中的设置位。这使SerializableAttribute
成为 pseudoattribute ,这是一个在元数据表中设置位或字段的属性。