学习C#:Attribute与Property(转自:http://jhxk.iteye.com/blog/481730)
来源:互联网 发布:软件维护的流程图 编辑:程序博客网 时间:2024/04/28 20:37
一.什么是Attribute 先看下面的三段代码: 1.自定义Attribute类:VersionAttribute 【3】AttributeUsageAttribute中的3个属性(Property)说明: 四.参考资料 【1】Msdn 【2】《你必须知道的.NET之特性和属性》,博主严重推荐! 【3】《Attribute在.net编程中的应用》系列文章 用指定的前缀来表示特性所应用的目标元素,建议这样来处理,因为显式处理可以消除可能带来的二义性。 【2】AttributeTargets目标包括: 2.Attribute: Attribute的目标是:为元素提供附加信息。它的作用更类似于注释。 可以说,Property/Field和Attribute是两个完全不同的概念,虽然他们有些时候能做一样的事,但请记住,他们是从本质上就不同的两个东西。 三.实现自己的Attribute时需要注意的一些问题 1.自定义的Attribute必须直接或者间接继承System.Attribute。 2.这里有一个约定:所有自定义的特性名称都应该有个Attribute后缀。当编译器看到一个属性被附加到一个程序元素上时,它会搜索具有指定属性名的System.Attribute派生类。如果编译器没有找到匹配的类,它就在指定的属性名后面加上Attribute,然后再进行搜索。因此,常见的使用做法是将属性类名定义为以Attribute结尾,在使用时忽略名称的这一部分 【1】Attribute可以关联的元素包括: 程序集(assembly)、模块(module)、类型(type)、属性(property)、事件(event)、字段(field)、方法(method)、参数(param)、返回值(return)。例如: 会出现编译错误。 2.Attribute作为编译指令 Attribute类是在编译的时候被实例化的,而不是像通常的类那样在运行时候才实例化。所以在第三段代码中,你可以在没有实例化MyCode对象的情况下取到MyCode的Attribute信息。由于Attribute类是在编译的时候被实例化的,所以你还可以用外部工具维护这些Attribute信息。 3.Attribute与Property 从中文来说,Attribute和Property的中文都叫“属性”,很容易让人混淆。现在的文章,Attribute一般翻译为”特性”,而Property称为“属性”。 或许你会问,我用静态的Property/Field一样可以做到在不实例化的时候拿到一些信息,如果这样的话,Attribute又有什么存在意义呢? 1.Property: Property可以说是一个面向对象的概念,提供了对私有字段的访问封装,在C#中以get和set访问器方法实现对可读可写属性的操作,提供了安全和灵活的数据访问封装。比如: 示例完毕!上面三段代码相信已经说明了Attribute大概是一个什么东西和怎么去用。 二.深入讨论Attribute 1.Attribute的概念定义 关于Attribute概念的定义,我直接引用《你必须知道的.NET之特性和属性》中的一段来说明: MADN的定义为:公共语言运行时允许添加类似关键字的描述声明,叫做attributes, 它对程序中的元素进行标注,如类型、字段、方法和属性等。Attributes和Microsoft .NET Framework文件的元数据(metadata)保存在一起,可以用来向运行时描述你的代码,或者在程序运行的时候影响应用程序的行为。 我们简单的总结为:定制特性attribute,本质上是一个类,其为目标元素提供关联附加信息,并在运行期以反射的方式来获取附加信息。 噢,原来Attribute的目的是为元素提供关联附加信息。其中,上面第一段代码中“[AttributeUsage(AttributeTargets.Class)] ”说明了Attribute提供附加信息的元素是Class,所以如果上面第二段的代码改为: 3.上面这个Class中的Attribute一般会被如何使用呢? 2.使用自定义Attribute的Class: 总结: Attribute是指为类附加的说明信息,与注释不同,这些说明信息是给机器看的,并能影响机器的执行,具体应用如下:
下面是一些开发自定义Attribute时,可能需要用到的资料:
1.影响编译器,相当于条件编译
2.调用API函数时,要用Attribute申明是.Net Framework之外的函数
3.自定义Attribute,用于描述对应类或方法,也就是传说中.net是自我描述的功能
4.还是对机器说明这个类有什么用的,机器看到后就会采取相应的动作,
如[seriablae],[webservice],[TestFixture]
- 学习C#:Attribute与Property(转自:http://jhxk.iteye.com/blog/481730)
- asp.net跳转页面的三种方法比较(转自http://jhxk.javaeye.com/blog/500543)
- 学习selenium,转载自http://jarvi.iteye.com/blog/1448025
- 需求分析 转自:http://fangang.iteye.com/blog/1345099
- jQuery对象与DOM对象之间的转换(转自:http://wozailongyou.iteye.com/blog/299311)
- TCP/IP 协议介绍(转自)http://zsxxsz.iteye.com/blog/568250
- scroll事件(转自:http://flare.iteye.com/blog/161858)
- dbunit使用(转自:http://ttitfly.iteye.com/blog/248680)
- hbase 介绍(转自:http://jimi68.iteye.com/blog/983059)
- PostgreSQL中使用SQL查询表结构(转自:http://deepfuture.iteye.com/blog/588758)
- python中文编码问题(转自http://wolfmaster.iteye.com/blog/638029)
- 【转】http://sjsky.iteye.com/blog/1142177
- 在一个js文件中引入另一个js文件(转自:http://copperfield.iteye.com/blog/937491)
- 利用Java生成静态HMTL页面的方法----------转自http://playfish.iteye.com/blog/150386
- Java每日一题01(转自http://jythoner.iteye.com/blog/322336)
- Jsp页面传值的方法(转自http://jzgl-javaeye.iteye.com/blog/372349#)
- PHP中的魔术方法,转自:http://4nail.iteye.com/blog/604913
- Excel之POI转自http://xiayingjie.iteye.com/blog/803682
- 提供一个在测试环境中,监控应用服务器的外部接口调用的方法(高峰)
- 关于数据库连接池的方方面面
- C#自定义Attribute举例!(转自:http://archive.cnblogs.com/a/471288/)
- 教你怎么做可以换皮肤的软件
- Android的智能指针
- 学习C#:Attribute与Property(转自:http://jhxk.iteye.com/blog/481730)
- dataroot is not writable, admin has to fix directory permissions! Exiting
- VS中QT的智能提示设置
- C#编写自定义特性(Attribute)详解(转自:http://www.csharpwin.com/csharpspace/9349r9836.shtml)
- JNDI的简单理解
- AJAX异步获取HTML之后 JQuery EasyUI 的界面重绘的解决办法
- 初识驱动笔记
- 表单中打开页面的几种方式及传参形式
- 从汇编看c语言函数调用