美文网首页
C# 特性(Attribute)

C# 特性(Attribute)

作者: 东经20度 | 来源:发表于2019-04-25 15:30 被阅读0次

特性是用于在运行时传递程序中各种元素(比如类、方法、结构、枚举、组件等)的行为信息的声明性标签。可以通过使用特性向程序添加声明性信息。一个声明性标签是通过放置在它所应用的元素前面的方括号([])来描述的。
特性用于添加元数据,如编译器指令和注释、描述、方法、类等其他信息。.Net 框架提供了两种类型的特性:预定义特性和自定义特性。

1. 规定特性

语法:

[attribute(positional_parameters,name_parameters=value,...)]

特性的名称和值是在方括号内规定的,放置在它所运用的元素之前。positional_parameters 规定必需的信息,name_parameter 规定可选的信息。

2. 预定义特性

.Net 框架提供了三种自定义特性:

  1. AttributeUsage
  2. Conditional
  3. Obsolete

2.1 AttributeUsage

所处命名空间 System
预定义特性 AttributeUsage 描述了如何使用一个自定义特性类。它规定了特性可应用到的项目的类型。
语法:

[AttributeUsage(
   validon,
   AllowMultiple=allowmultiple,
   Inherited=inherited
)]

属性说明:

  • ValidOn
    参数 validon 规定特性可被放置的语言元素。它是枚举器 AttributeTargets 的值的组合。默认值是 AttributeTargets.All。
  • AllowMultiple(可选)
    为该特性的 AllowMultiple 属性(property)提供一个布尔值。如果为 true,则该特性是多用的。默认值是 false(单用的)。
  • Inherited(可选)
    为该特性的 Inherited 属性(property)提供一个布尔值。如果为 true,则该特性可被派生类继承。默认值是 false(不被继承)。

2.2 Conditional

所处命名空间:System.Diagnostics
这个预定义特性标记了一个条件方法,其执行依赖于指定的预处理标识符。
它会引起方法调用的条件编译,取决于指定的值,比如 Debug 或 Trace。
语法:
[Conditional(
conditionalSymbol
)]

2.3 Obsolete

所处命名空间:System
这个预定义特性标记了不应被使用的程序实体。它可以让您通知编译器丢弃某个特定的目标元素。例如,当一个新方法被用在一个类中,但是您仍然想要保持类中的旧方法,您可以通过显示一个应该使用新方法,而不是旧方法的消息,来把它标记为 obsolete(过时的)。
语法:

[Obsolete(
   message
)]
[Obsolete(
   message,
   iserror
)]

属性:

  • message
    是一个字符串,描述项目为什么过时的原因以及该替代使用什么。
  • iserror
    是一个布尔值。如果该值为 true,编译器应把该项目的使用当作一个错误。默认值是 false(编译器生成一个警告)。

3. 自定义特性

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

  • 声明自定义特性
  • 构建自定义特性
  • 在目标程序元素上应用自定义特性
  • 通过反射访问特性

最后一个步骤包含编写一个简单的程序来读取元数据以便查找各种符号。元数据是用于描述其他数据的数据和信息。该程序应使用反射来在运行时访问特性。

3.1 声明自定义特性

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

相关文章

  • C#特性(Attribute)-现学现用

    前言 想要灵性的使用C#反射机制,特性(Attribute)的使用是必不可少的。 C# 特性(Attribute)...

  • C# 特性(Attribute)

    特性是用于在运行时传递程序中各种元素(比如类、方法、结构、枚举、组件等)的行为信息的声明性标签。可以通过使用特性向...

  • c# Attribute 特性

    https://www.cnblogs.com/zhaoyl9/p/12027938.html[https://w...

  • [Hack] C# Attribute使用约束

    Attribute是C#中一个广泛使用的特性,通过使用Attribute对程序集中的类型进行标记,并通过Refle...

  • c#特性

    c#特性: 特性(Attribute)是用于在运行时传递程序中的各种元素(比如类,方法,结构,枚举,组件等)的行为...

  • 知识点|C#高级知识:Attribute特性

    C#特性[Attribute]是一类特殊的语法结构,我们掌握了特性的相关用法,就能在运行时,通过反射,得到一些额外...

  • 编辑器扩展基础1——常用的Attribute

    Attribute Attribute是C#的功能,在Unity中可以使用Attribute来给变量和方法增加新的...

  • 关于C# 中的Attribute 特性

    https://kb.cnblogs.com/page/87531/

  • 特性(Attribute)

    前言:本来打算将特性(Attribute)和反射(Reflection)写在一章里,但感觉反射(Reflectio...

  • Unity Attribute(特性)

    1、DisallowMultipleComponent控制同一类型的组件在一个对象上只能挂载一个,一般给一个父类加...

网友评论

      本文标题:C# 特性(Attribute)

      本文链接:https://www.haomeiwen.com/subject/rifigqtx.html