[转]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 目录 特性简介 使用特性 特性 ...
随机推荐
- 【ASP.NET Core】标记帮助器——元素筛选
前一篇中老周从标记帮助的底层介绍关键性的接口,如 ITagHelper ,它是一个标志,用于识别哪些类属于 Tag Helper. 标记帮助器毕竟是针对 HTML 标记的,所以得筛选.说白了就是我写的 ...
- 加密,各种加密,耙梳加密算法(Encryption)种类以及开发场景中的运用(Python3.10)
不用说火爆一时,全网热议的Web3.0区块链技术,也不必说诸如微信支付.支付宝支付等人们几乎每天都要使用的线上支付业务,单是一个简简单单的注册/登录功能,也和加密技术脱不了干系,本次我们耙梳各种经典的 ...
- 勇者sky遇上的命中注定的恋人白羽竟然是妹妹2
题目大意 构造一个分段函数来拟合若干点(\(x_i , y_i\)),每一段是一个常函数,即 \[f(x)= \left \{ \begin{aligned} a_1& & (0\le ...
- 通过Rsync实现文件远程备份
转载:博客园 https://www.cnblogs.com/huligong1234/p/13513395.html
- js的map、filter的用法
filter() 创建新数组,新数组放指定数组中符合条件的元素,满足条件的留下,是对原数组的过滤. map() 返回一个新数组,数组中的元素为原始数组元素调用函数处理后的值,是对原数组的加工,映 ...
- Map Inference in the Face of Noise and Disparity代码环境搭建
1. 引言 地图生成算法网站Mapconstruction by pfoser里可以看到许多关于地图生成算法的介绍,Map Inference in the Face of Noise and Dis ...
- 开发者进阶必备的9个Tips & Tricks!
优秀的开发人员市场前景是十分广阔的,但想找到一份理想的工作,仅有代码知识是不够的.优秀的工程师应该是一个终身学习者.问题的创造性解决者,着迷于整个软件世界.要成为一名优秀的开发者,应该具备哪些品质并做 ...
- Django中admin的一些知识点
Django中的Admin站点管理: 内容发布的部分由网站的管理员负责,包括查看.添加.修改.删除数据: Django项目中默认启用Admin管理站点:列表页选项, 编辑页选项, 重写模板. #准备工 ...
- 硬件监控:grafana+prometheus+node_exporter
一.前期准备: grafana:前端展示平台,没有数据存储功能,但是,它有不同的展示模板,然后,把后端数据库中提供的数据,进行展示 -->展示数据 prometheus(普罗米修斯):时序数据库 ...
- javaSE学习一
java基础 java是一种强类型语言:要求变量的使用要严格符合规定,所有变量都必须先定义后才能使用. java的数据类型有两大类:基本数据类型和引用类型(类.接口.数组) 八大基本数据类型: 1.整 ...