名称装饰/修剪和属性修饰之间有区别吗?

时间:2008-11-07 01:00:41

标签: c#

我一直在阅读有关C#扩展的文本,并且有一次它说“属性修饰X可能只适用于Y类型的字段。”

我无法找到属性修饰的定义,而且通过交换这两个来解释我并没有多大意义。

2 个答案:

答案 0 :(得分:1)

它可能指的是Attribute类。例如,您可以通过SerializableAttribute将类型标记为可序列化。应用属性时,可以不使用“属性”后缀。

[Serializable]
public class SomeClass {

}

属性提供了一种添加有关代码的元数据的方法。

答案 1 :(得分:1)

属性用于以结构化方式向.NET(C#)代码添加元数据。然而,很多人没有意识到,实际上有两种属性。

最简单的是自定义属性,您可以在其中定义特定类查找的属性,以更改其工作方式。一个常见示例是System.Xml.Serialization属性,XmlSerializer读取这些属性以改变其输出,例如可以将类标记为类似以下内容以指定其名称空间,并且该字段应该是属性:

[XmlType(Namespace = "http://mycompany.com/")]
public class MyClass
{
    [XmlAttribute]
    public string MyField;
}

这样的自定义属性对编译器或运行时没有意义,它们只是作为元数据的一部分添加到类中,可以通过调用Type.GetCustomAttributes来检索。

另一个主要属性组是伪自定义属性,它们实际上对编译器或运行时有意义。 Haacked SerializableAttribute的帖子中的示例实际上是伪自定义属性的示例。它实际上存储为类型定义的一部分,无法使用Type.GetCustomAttributes检索。您无法创建自己的伪自定义属性。

所以你在这里处理的是一个自定义属性,它正由特定工具查找。