什么是.NET中的自定义属性

时间:2012-07-31 14:49:41

标签: .net attributes custom-attributes

问题不是那么简单:)。

基本上,我需要知道的是将从Attribute.GetCustomAttributes()方法族中的任何方法返回的数组中包含的内容。

当然,我定义的所有属性都将存在。但是,不仅仅是他们。例如,所有实体框架属性(如EdmScalarPropertyAttribute)也都存在。什么属性不会被视为自定义?

1 个答案:

答案 0 :(得分:6)

几乎每个从System.Attribute派生并添加了[AttributeName]语法的属性都会存在。其中一些甚至由编译器本身添加,例如OutAttribute关键字的out

“custom”一词将它们与直接构建到运行时的属性区分开来,例如成员/类型的可见性,方法staticvirtualsealed等等。

例如,Type.AttributesTypeAttributes类型的枚举,或MethodBase.Attributes对应MethodAttributes枚举。那些不算“习惯”。


关于[Serializable]和内存布局,有一些奇怪的极端情况。

基本C#writes

  

然而,使System.SerializableAttribute不仅仅是自定义属性的一个特征是CIL对可序列化类具有特殊的标题符号。

     

...

     

SerializableAttribute转换为元数据表中的设置位。这使SerializableAttribute成为 pseudoattribute ,这是一个在元数据表中设置位或字段的属性。