C# 面试题
目录

C# 中常用的预定义特性有哪些?

· 约 5 分钟读完 · 第 71 / 183 章

推荐答案

在C#中,常用的预定义特性(Attributes)包括:

  1. [Obsolete]:用于标记方法、类或属性已过时,建议使用其他替代方案。
  2. [Serializable]:用于标记类可以被序列化。
  3. [NonSerialized]:用于标记字段不应被序列化。
  4. [DllImport]:用于声明外部非托管库的函数。
  5. [Conditional]:用于条件编译,只有在定义了指定的预处理标识符时,才会调用该方法。
  6. [AttributeUsage]:用于定义自定义特性的使用范围。
  7. [Flags]:用于标记枚举类型,表示该枚举可以作为位域处理。
  8. [DataContract] 和 [DataMember]:用于标记类和数据成员,以便在WCF服务中进行序列化。
  9. [WebMethod]:用于标记ASP.NET Web服务中的方法。
  10. [TestClass] 和 [TestMethod]:用于标记单元测试类和测试方法。

本题详细解读

[Obsolete] 特性

[Obsolete] 特性用于标记代码中的某些元素(如方法、类、属性等)已经过时,建议开发者使用其他替代方案。它可以带有一个可选的字符串参数,用于说明为什么该元素已过时以及推荐使用的替代方案。

[Serializable] 特性

[Serializable] 特性用于标记类可以被序列化。序列化是将对象的状态转换为可以存储或传输的形式的过程。

[NonSerialized] 特性

[NonSerialized] 特性用于标记字段不应被序列化。这在某些情况下非常有用,例如当字段包含敏感信息或不需要持久化的数据时。

[DllImport] 特性

[DllImport] 特性用于声明外部非托管库的函数。它通常用于调用Windows API或其他非托管代码。

[Conditional] 特性

[Conditional] 特性用于条件编译,只有在定义了指定的预处理标识符时,才会调用该方法。

[AttributeUsage] 特性

[AttributeUsage] 特性用于定义自定义特性的使用范围。它可以指定特性可以应用于哪些程序元素(如类、方法、属性等),以及是否允许多次应用。

[Flags] 特性

[Flags] 特性用于标记枚举类型,表示该枚举可以作为位域处理。这使得枚举值可以进行位操作。

[DataContract] 和 [DataMember] 特性

[DataContract] 和 [DataMember] 特性用于标记类和数据成员,以便在WCF服务中进行序列化。

[WebMethod] 特性

[WebMethod] 特性用于标记ASP.NET Web服务中的方法,使其可以通过Web服务调用。

[TestClass] 和 [TestMethod] 特性

[TestClass] 和 [TestMethod] 特性用于标记单元测试类和测试方法。这些特性通常与单元测试框架(如MSTest)一起使用。