在.NET中,什么是自定义属性?

3

这个问题并不简单 :).

基本上,我需要知道从 Attribute.GetCustomAttributes() 方法系列中的任何一个方法返回的数组将包含什么内容。

肯定会有我定义的所有属性。但不仅仅是它们。例如,所有 Entity Framework 属性,比如 EdmScalarPropertyAttribute,也会在其中。哪些属性不会被视为自定义属性?


1
不确定是否理解。您是在询问“自定义属性”与“属性”之间的区别吗? - ken2k
我认为这就是重点。 - Seb
2ken2k:是的。无论是一般情况还是在GetCustomAttributes方法方面,都存在差异。 - Michael Sagalovich
1个回答

6
几乎所有从System.Attribute派生并使用[AttributeName]语法添加的属性都会出现。其中一些甚至是编译器自己添加的,例如out关键字的OutAttribute

"自定义"一词将它们与直接内置于运行时的属性区分开来,例如成员/类型的可见性、方法是否为staticvirtualsealed等。

例如,Type.Attributes是一个TypeAttributes类型的枚举,或者MethodBase.Attributes对应于MethodAttributes类型的枚举。这些不算作“自定义”。


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

Essential C# 写道

使System.SerializableAttribute不仅仅是自定义属性的特征之一,是CIL对可序列化类具有特殊头注释的事实。

...

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


非常感谢!对于最终用户(程序员)来说,自定义属性和属性是完全不同的东西,这可能会引起混淆。 - Michael Sagalovich
通常我们称自定义属性为属性。因此,这确实是不幸的术语。 - CodesInChaos

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接