[转]c#特性(Attribute)学习总结1
特性是用于在运行时传递程序中各种元素(类、方法、结构、枚举、组件等)的行为信息的声明性标签。
官方的解读不好理解,举个常用的例子,平时会在类的上面加上[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方法没有被执行。
自定义特性
自定义特性,用于存储声明性的信息,且可在运行时被检索。该信息根据设计标准和应用程序需要,可与任何目标元素相关。
创建并使用自定义特性包含四个步骤:
- 声明自定义特性
- 构建自定义特性
- 在目标程序元素上应用自定义特性
- 通过反射访问特性
下面通过一个获取枚举中描述信息的实例展示自定义特性的用法:



调用:

最终执行结果,remark为‘已冻结’。
转自https://blog.csdn.net/liangmengbk/article/details/112753730
[转]c#特性(Attribute)学习总结1的更多相关文章
- 代码走查25条疑问 C# 跳转新的标签页 C#线程处理 .Net 特性 attribute 学习 ----自定义特性 看懂 ,学会 .NET 事件的正确姿势-简单版
代码走查25条疑问 代码走查(Code Review) 是一个开发人员与架构师集中讨论代码的过程.通过代码走查可以提高代码的 质量,同时减少Bug出现的几率.但是在小公司中并没有代码走查的过程在这 ...
- .Net 特性 attribute 学习 ----自定义特性
什么是特性? [Obsolete("不要用无参构造函数",true)] 放在方式上, 该方法就不能使用了 [Serializable]放在类上面.该类就是可以序列化和反序列化使用 ...
- C#特性Attribute学习
起初一直纠结于如何调用特性附着在下面那个成员的值,后来发现不需要调用,通过反射加载的时候是自动绑定上去的,即 获得成员对象之后,有一个方法可以获得特性标签. 其实从类库提供者,和类库使用者的角度,分开 ...
- C# Attribute学习
由于项目中需要使用到序列化相关的技术,从而想到是否可以使用C#中的特性,特此花了近两小时学习了一下. 对于特性的学习,主要参考了两篇博文,特此感谢.以下附链接: http://www.cnblogs. ...
- .Net内置特性Attribute介绍
特性Attribute概述 特性(Attribute)是一种特殊的类型,可以加载到程序集或者程序集的类型上,这些类型包括模块.类.接口.结构.构造函数.方法.字段等,加载了特性的类型称之为特性的目标. ...
- 理解特性attribute 和 属性property的区别 及相关DOM操作总结
查一下英语单词解释,两个都可以表示属性.但attribute倾向于解释为特质,而property倾向于解释私有的.这个property的私有解释可以更方便我们下面的理解. 第一部分:区别点 第一点: ...
- C#中的特性 (Attribute) 入门 (二)
C#中的特性 (Attribute) 入门 (二) 接下来我们要自己定义我们自己的特性,通过我们自己定义的特性来描述我们的代码. 自定义特性 所有的自定义特性都应该继承或者间接的继承自Attribut ...
- C#中的特性 (Attribute) 入门 (一)
C#中的特性 (Attribute) 入门 (一) 饮水思源 http://www.cnblogs.com/Wind-Eagle/archive/2008/12/10/1351746.html htt ...
- [C#] 剖析 AssemblyInfo.cs - 了解常用的特性 Attribute
剖析 AssemblyInfo.cs - 了解常用的特性 Attribute [博主]反骨仔 [原文]http://www.cnblogs.com/liqingwen/p/5944391.html 序 ...
- [C#] C# 知识回顾 - 特性 Attribute
C# 知识回顾 - 特性 Attribute [博主]反骨仔 [原文地址]http://www.cnblogs.com/liqingwen/p/5911289.html 目录 特性简介 使用特性 特性 ...
随机推荐
- ArcGIS Pro SDK 002 对数据文件的读取和操作
做系统开发或者数据处理的时候,我一般还是喜欢使用文件数据源,例如矢量用.shp文件存储,栅格数据用.tif或者.img文件存储.ArcGIS Pro SDK中对数据源操作的API和ArcObjects ...
- 如何完美运行黑苹果 macOS Catalina
2018年年初,我在闲鱼 APP 上,以799元的价格,购买了一台二手的联想 ThinkPad 11e 笔记本电脑.这是一台美版的教育用途电脑,成色较新,根据自带硬盘记录,该电脑使用时长仅有230+小 ...
- sqllabs靶场less1-4
less1-4 语法:Select 列名称 from 表名称 (where column_name='xxx' and -) 在数据库中: information_schema:存放和数据库有关的东西 ...
- 代码随想录算法训练营day10 | leetcode 232.用栈实现队列 225. 用队列实现栈
基础知识 使用ArrayDeque 实现栈和队列 stack push pop peek isEmpty() size() queue offer poll peek isEmpty() size() ...
- Java刷题常用的数据结构总结
目录 1. 基础运算 2. 字符串类 3. 数组类与链表 4. 栈和队列 5. 字典类 6. 树 1. 基础运算 //int型相关操作 Integer.INT_MAX;//int型最大值 Intege ...
- YML
一.YML语法 1.约定 k: v 表示键值对关系,冒号后面必须有一个空格 使用空格的缩进表示层级关系,空格数目不重要,只要是左对齐的一列数据,都是同一个层级的 大小写敏感 缩进时不允许使用Tab键, ...
- FTP调优
最近在解决客户的问题时接触到了一些FTP的问题,自己在使用过程中发现了很多问题,所以这里总结了一些调优的办法: 服务:vsftp 非常安全文件传输 配置文件:/etc/vsftpd/vsftpd.co ...
- 最火小游戏《羊了个羊》最新H5升级通关版
背景 最近大火的微信小游戏<羊了个羊>刷爆朋友圈和群聊,大家都在搜索羊了个羊第二关怎么过.羊了个羊通关秘籍.这款小游戏实在难度太高,及其容易上瘾,而且很多朋友怎么也通不过. 这一次小编给大 ...
- SAP FBL1N屏幕增强,增加自定义的列
需求 因财务想要在查看未清和已清凭证的时候,看到是该凭证是否哪一个采购人员创建,因此新增一列创建人,关联关系是 EKKO-EBELN=BSEG-ZUONR,这里关联分配号是因为之前开发自动清账的时候做 ...
- spring RedisTemplate用法
1.maven依赖 <!-- https://mvnrepository.com/artifact/org.springframework.data/spring-data-redis --&g ...