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