问题不是那么简单:)。
基本上,我需要知道的是什么将包含在从一系列方法中的任何方法返回的数组中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了一个伪属性,一个在元数据表中设置位或字段的属性。