Attribute之基础

在工作的过程中看到实体类里用了很多Attribute,一直没有时间来研究它到时是什么?它有什么用?没有这个东东程序是否还能运行等等?带着这一系列的疑问来和大家一起学习一下Attribute。

一、是什么?

通俗的来说Attribute就是一个类,在CSDN中是这样解释的:

他是公共语言运行时允许你添加类似关键字的描述声明,叫做attributes,它对程序中的元素进行标注,如类型、字段、方法和属性等。Attributes和Microsoft .NETFramework文件的元数据保存在一起,可以用来向运行时描述你的代码,或者在程序运行的时候影响应用程序的行为。

在.NET中,Attribute被用来处理多种问题,比如序列化、程序的安全特征、防止即时编译器对程序代码进行优化从而代码容易调试等等。那么就下来就让我们来具体的谈谈它到底怎么用?

二、怎么用?

(一)作为编译器的指令

(1)
Conditional:起条件编译的作用,只有满足条件,才允许编译器对它的代码进行编译。一般在程序调试的时候使用。

(2)DllImport:用来标记非.NET的函数,表明该方法在一个外部的DLL中定义。

(3)Obsolete:这个属性用来标记当前的方法已经被废弃,不再使用了。

(二)自定义Attribute类

(1)Attribute的命名规范

也就是你的Attribute的类名+"Attribute",当你的Attribute施加到一个程序的元素上的时候,编译器先查找你的Attribute的定义,如果没有找到,那么它就会查找“Attribute名称"+Attribute的定义。如果都没有找到,那么编译器就报错。

(2)可以通过AttributeUsage的Attribute来限定你的Attribute所施加的元素的类型

[AttributeUsage(AttributeTargets.Class|AttributeTargets.Method)]

public classClassMethodTargetAttribute : Attribute{}

以上只是对它的一些简单的了,实例等下次再附加。

三、联想到什么?

通过以上对Attribute的一些介绍,我们知道在类的成员中有property成员,二者在中文中都做属性解释,那么它们到底是不是同一个东西呢?从代码上看,明显不同。

首先,它们在代码中的位置不同

其次,写法不同(Attribute必须写在一对方括号中)

四、作用

那么它到底有什么作用呢?接下来谈谈自己的体会

(1)修饰C#代码,对其进行描述或声明;

(2)在运行时通过反射来获取并使用其声明或控制信息。[不是供一般意义上调用或使用的]

五、总结

通过以上对Attribute的介绍,简单的概括就是修饰C#代码并对其类型、方法和属性等的描述和声明的类。在下一篇会通过实例来进一步对其进行介绍。

时间: 2024-09-27 12:08:15

Attribute之基础的相关文章

20150223 IMX257 设备驱动模型之Kobject(一)

20150223 IMX257 设备驱动模型之Kobject(一) 2015-02-23 李海沿 接下来我们开始涉及设备驱动模型,从简入深,我们先写一个驱动,实现的功能就是在sys目录下建立一个目录和一个属性文件,可读可写. 所以今天的任务就是把这个程序搞定,只要把这几个结构体了解,知道有这个结构体就够了,很晚了,剩下的我们交给明天吧. 一.结构体参数解释 1. kobject kobject是设备驱动模型的基础.sysfs是基于kobject建立起来的. struct kobject{ con

基于Bootstrap和Knockout.js的ASP.NET MVC开发实战

之前在一家公司里用过Knockout,是easyui 和 Knockout结合 的.下面的这本应该不错. 目录 前言 第一部分入门指南 第1章MVC介绍 创建第一个项目 分析HomeController 分析View 理解URL结构 小结 第2章Bootstrap介绍 默认菜单 含有下拉列表和搜索框的菜单 按钮 警告框 主题 小结 第3章Knockout.js介绍 安装Knockout.js 基本示例 何为MVVM? 创建ViewModel 小结 第4章数据库应用 Entity Framewor

《重构:改善既有代码的设计》 笔记 1

重构(名词):对软件内部结构的一种调整.目的是在不改变「软件之可察行为」前提下,提高其可理解性,降低其修改成本. 如果你发现自己需要为程序添加一个特性,而代码结构使你无法很方便地那么做,那就先重构那个程序,使特性的添加比较容易进行,然后再添加特性. 测试过程中很重要的一部分,就是测试程序对于结果的回报方式.它们要不说 "OK",表示所有新字符串都和参考字符串一样.要不就印出一份失败清单,显示问题字符串的出现行号.这些测试都属于自我检验self-checking).你必须让测试有能力自我

.NET方法无限传参数技术

是否有这样的需求在创建函数时参数个数不固定,又不想使用重载,那么下面这个技术就比较适合. 相信你一定见过下面这的代码: string.Format("我叫:{0}今年:{1}岁.", "师傅", 29); Format 就是string的一个函数,第一个参数是固定的字符串类型,那么后面的参数就不确定是具体什么数据类型和后续要传入多少个参数. 如果要用重载的话,每增加一个参数就需要增加一个重载比较麻烦. 例如: public void Add(string sql,

java web 开发三剑客 -------电子书

Internet,人们通常称为因特网,是当今世界上覆盖面最大和应用最广泛的网络.根据英语构词法,Internet是Inter + net,Inter-作为前缀在英语中表示“在一起,交互”,由此可知Internet的目的是让各个net交互.所以,Internet实质上是将世界上各个国家.各个网络运营商的多个网络相互连接构成的一个全球范围内的统一网,使各个网络之间能够相互到达.各个国家和运营商构建网络采用的底层技术和实现可能各不相同,但只要采用统一的上层协议(TCP/IP)就可以通过Internet

C#基础系列:实现自己的ORM(反射以及Attribute在ORM中的应用)

反射以及Attribute在ORM中的应用 一. 反射什么是反射?简单点吧,反射就是在运行时动态获取对象信息的方法,比如运行时知道对象有哪些属性,方法,委托等等等等.反射有什么用呢?反射不但让你在运行是获取对象的信息,还提供运行时动态调用对象方法以及动态设置.获取属性等的能力.反射在ORM中有什么用呢?我这里所讨论的ORM实现是通过自定义Attribute的方式进行映射规则的描述的.但是我们并不知道具体哪个对象需要对应哪个表,并且这些对象是独立于我们的ORM框架的,所以我们只能通过自定义Attr

C#基础---Attribute(标签) 和 reflect(反射) 应用二

以前我有写过一篇有关,打标签和反射的应用,主要用于类中字段的验证.下面是连接 C#基础---Attribute(标签) 和 reflect(反射) 应用. 这个项目迭代发现公司项目里面发现老代码对业务扩展比较大的地方又通过打标签和反射做了一个小的框架,感觉挺实用的.于是想一想模仿一下就搬到博客园上.写得可能不好,也请各位博友指点. 背景: [为了方便,自己还是模拟一个背景吧, 感觉不是很恰当,不过自己的Demo里面自己这样写的.当然跟公司的比起来肯定不够完善]   每个人都会吃饭,可是每个国家吃

.NET基础编程之特性 - Attribute

这一篇文章是给大家介绍的是:.NET基础编程之特性 - Attribute,对这一部分掌握不熟悉的同学,可以仔细的看一下! 一.特性简介 特性提供功能强大的方法,用以将元数据或声明信息与代码(程序集.类型.方法.属性等)相关联.特性与程序实体关联后,可在运行时使用"反射"查询特性. 特性具有以下属性: (1)特性可向程序中添加元数据.元数据是有关在程序中定义的类型的信息.所有的 .NET 程序集都包含指定的一组元数据,这些元数据描述在程序集中定义的类型和类型成员.可以添加自定义特性,以

C#基础系列——Attribute特性使用

前言:上篇 C#基础系列--反射笔记 总结了下反射得基础用法,这章我们来看看C#的另一个基础技术--特性. 1.什么是特性:就博主的理解,特性就是在类的类名称.属性.方法等上面加一个标记,使这些类.属性.方法等具有某些统一的特征,从而达到某些特殊的需要.比如:方法的异常捕捉,你是否还在某些可能出现异常的地方(例如数据库的操作.文件的操作等)经常使用try...catch.这个时候如果使用特性,就可以大大减少方法里面的try...catch的使用.你只需要定义一个专门捕捉异常的特性类Excepti