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

官方的解读不好理解,举个常用的例子,平时会在类的上面加上[Serializable],Serializable就是TestClass这个类的一个特性,它表示这个类是可以被序列化的。如下图:

.Net框架提供两种类型的特性:预定义特性和自定义特性。

预定义特性一:Obsolete

这个预定义特性标记了不应被使用的程序实体。比如某个方法将被废弃,不提倡再次使用,则可以在方法上加上这个特性,那么在调用时就会提示相关信息。

上面实例表示OldMethod方法不要再调用了,请使用NewMethod方法来替代OldMethod方法。

Obsolete特性有两个参数:第一个参数是描述性信息;第二个参数为bool类型,如果该值为 true,编译器应把该项目的使用当作一个错误,编译不通过。默认值是 false,编译器生成一个警告,程序仍可以执行。

预定义特性二:AttributeUsage

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

这个特性有三个参数,AttributeTargets参数必填,其他两个参数可选。AttributeTargets参数规定特性可以应用在哪些元素上(类、属性、方法等),AllowMultiple参数为bool值,true表示该特性可以同时在一个元素上写多个(多用),默认为false,表示一个元素上只能写一个该特性(单用)。Inherited参数也是bool值,true表示该特性可被子类继承,默认为false,子类不继承该特性。

预定义特性三:Conditional

这个预定义特性标记了一个条件方法,其执行依赖于指定的预处理标识符。具体用法见如下实例:

说明:标识符可以随意命名,这里是举个例子写了Do

这时候运行程序,执行结果和普通方法调用时一样的,没有任何区别。程序执行结果:

可以看到Message被执行了。

如果把程序的第一行代码#define Do,去掉,那么Message方法将不会被执行。

执行结果:

可以看到Message方法没有被执行。

自定义特性

自定义特性,用于存储声明性的信息,且可在运行时被检索。该信息根据设计标准和应用程序需要,可与任何目标元素相关。

创建并使用自定义特性包含四个步骤:

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

下面通过一个获取枚举中描述信息的实例展示自定义特性的用法:

调用:

最终执行结果,remark为‘已冻结’。

转自https://blog.csdn.net/liangmengbk/article/details/112753730

最新文章

  1. MySQL基础之存储过程
  2. PPT转化成Image、PPTX、XPS、EMF
  3. 【Phylab2.0】Beta版本项目展示
  4. 【JavaScript】图片上传预览
  5. MainWindow、QWidget和QDialog的区别和选择(转载)
  6. hdu5092 dp(递推)
  7. [solr] - SolrJ增删查
  8. AX2012 审批流流转到已停用的域账号导致审批流停止
  9. SQL Server存储过程中防止线程重入处理方式
  10. ASP.NET MVC5--为数据库新增字段(涉及数据库迁移技术)
  11. ads 错误
  12. java多线程之从任务中获取返回值
  13. sizeof求字节以及与strlen的区别
  14. careercup-中等难度 17.9
  15. javascript——面向对象程序设计(2)
  16. 利用Linux命令行进行文本按行去重并按重复次数排序
  17. 解决Idea GitLab Clone failed: Authentication failed for的问题
  18. phoenix 报错:type org.apache.phoenix.schema.types.PhoenixArray is not supported
  19. C#自动化操作IE浏览器系列之一打开新的浏览器并导航到百度进行搜索
  20. mybatis基础系列(三)——动态sql

热门文章

  1. C语言补漏--内存管理-完结
  2. Symbol详解
  3. 【JS入门小游戏】01-骰子游戏
  4. 题解 P4163 [SCOI2007]排列
  5. Centos7-RAID冗余磁盘阵列
  6. 电子辅助的个体化严密控制策略比常规方法更有效地帮助早期RA实现全面控制病情[EULAR2015_THU0122]
  7. OPTIRRA研究: TNF拮抗剂维持期优化减量方案[EULAR2015_SAT0150]
  8. 3D场景建模
  9. Android MVP框架 详细代码
  10. Ubuntu20.04 安装RabbitMQ 亲测可行