Skip to content

特性(Attribute)

L edited this page Mar 19, 2020 · 3 revisions

摘抄自C# 特性(Attribute)C# 反射(Reflection)

特性(Attribute)是用于在运行时传递程序中各种元素(比如类、方法、结构、枚举、组件等)的行为信息的声明性标签。您可以通过使用特性向程序添加声明性信息。一个声明性标签是通过放置在它所应用的元素前面的方括号([ ])来描述的。

特性(Attribute)用于添加元数据,如编译器指令和注释、描述、方法、类等其他信息。.Net 框架提供了两种类型的特性:预定义特性自定义特性

预定义特性

AttributeUsage

预定义特性 AttributeUsage 描述了如何使用一个自定义特性类。它规定了特性可应用到的项目的类型

Conditional

预定义特性Conditional标记了一个条件方法,其执行依赖于它顶的预处理标识符

Obsolete

预定义特性Obsolete标记了不应被使用的程序实体。它可以让您通知编译器丢弃某个特定的目标元素。例如,当一个新方法被用在一个类中,但是您仍然想要保持类中的旧方法,您可以通过显示一个应该使用新方法,而不是旧方法的消息,来把它标记为 obsolete(过时的)
常见于废弃方法、废弃类,用于提示开发者及时修改代码,一般会在下一个版本删去过时的方法或类

创建自定义特性

.Net 框架允许创建自定义特性,用于存储声明性的信息,且可在运行时被检索。该信息根据设计标准和应用程序需要,可与任何目标元素相关
创建并使用自定义特性包含四个步骤:
1.声明自定义特性
2.构建自定义特性
3.在目标程序元素上应用自定义特性
4.通过反射访问特性

声明自定义特性

一个新的自定义特性应派生自 System.Attribute

// 一个自定义特性 BugFix 被赋给类及其成员
[AttributeUsage(AttributeTargets.Class |
AttributeTargets.Constructor |
AttributeTargets.Field |
AttributeTargets.Method |
AttributeTargets.Property,
AllowMultiple = true)]

public class DeBugInfo : System.Attribute

构建自定义特性

完成功能

在目标程序元素上应用自定义特性

通过把特性放置在紧接着它的目标之前,来应用该特性

[DeBugInfo(45, "Zara Ali", "12/8/2012", Message = "Return type mismatch")]
[DeBugInfo(49, "Nuha Ali", "10/10/2012", Message = "Unused variable")]
class Target

通过反射访问特性

示例代码

Attributes

Clone this wiki locally