读书笔记(特性)

  特性是一种有别于普通命令式编程的编程方式,通常被称为申明式编程方式

  所谓申明式的编程方式,就是指程序员只需申明某个模块会具有怎样的特性,而无须关心如何去实现

  

1     [PermissionSetAttribute(SecurityAction.Demand,namespace="FullTrust")]
2     class UseReflection
3     {
4       //some code
5     }

  当一个特性被添加到某个元素上时,该元素就被认为具有了这个特性所代表的功能或性质

  例如上述代码UseReflection 类型在添加了PermissionSetAttribute之后,就会被认为需要有完全信任的通行证才能运行

  

 1 /// <summary>
 2         /// 使用自定义特性
 3         /// </summary>
 4         [MyAttribute("UseMyAttribute")]
 5         class UseMyAttribute
 6         {
 7             public static void TestMyAttribute()
 8             {
 9                 Type t  = typeof(UseMyAttribute);
10                 //得到自定义特性
11                 Object[] attribute = t.GetCustomAttributes(false);
12                 MyAttribute att = (MyAttribute)attribute[0];
13                 Console.WriteLine(att.ClassName);
14             }
15         }
16
17
18         /// <summary>
19         /// 自定义的特性
20         /// </summary>
21         [AttributeUsage(AttributeTargets.Class)]
22         public class MyAttribute : Attribute
23         {
24             private String _classname;
25             public MyAttribute(string s)
26             {
27                 _classname = s;
28             }
29             public string ClassName
30             {
31                 get
32                 {
33                     return _classname;
34                 }
35             }
36         } 

  特性可以应用在程序集,模块,类,结构,枚举,构造方法,方法,属性,字段,事件,接口,参数,委托,返回参数和泛型参数这些目标元素之上,通过AttributeUsage特性可以限制自定义特性的使用范围

.net提供的查找是否申明指定特性的方法

  1. System.Attribute.IsDefined

  这是一个高效判断某个元素是否申明了某特性的方法,它的高效在于该方法不会实际地初始化特性

  而只是查找该元数据并且返回一个布尔型变量来指明是否查找到指定的属性

  2. System.Attribute.GetCustomerAttribute

  该方法用于得到申明在指定元素上的一个指定特性的实例对象,如果指定元素没有包含指定的特性或其派生特性,则会返回NULL

  同时如果指定元素申明了多次制定的特性或者其派生特性,则会抛出一个System.Reflection.AmbiguousMatchException的异常

  3. System.Attribute.GetCustomerAttributes

  该方法类似于System.Attribute.GetCustomerAttribute方法 不同的是该方法将以一数组的形式返回查找到底符合条件的所有特性对象

  4. System.Reflection.CustomAttributeData

  该类型拥有一个已重载的静态方法GetCustomAttribte用已获得一个IList<AttributeData>的对象,而每一个CustomAttributeData对象都封装了特性的详细  信息

当一个特性申明了AttributeUsage特性并且显式地将AllowMultiple属性设置为true时,该特性就可以在同一元素上多次申明,否则地话编译器将报错

读书笔记(特性)

时间: 2025-01-21 20:58:29

读书笔记(特性)的相关文章

InnoDb 体系架构和特性 (Innodb存储引擎读书笔记)

后台线程 Master Thread 核心后台线程,主要负责将缓冲池的数据异步刷新到磁盘.例如脏页的刷新,插入缓冲的合并,undo 页的回收等. 每秒一次的操作: 日志缓冲刷新到磁盘,即使该事务还没有提交.该操作总是会发生,这个就是为了再大的事务,提交时间都很短. 当IO压力很小时(1s内发生的IO次数小于5% innodb_io_capacity)合并5% innodb_io_capacity 的插入缓冲. 当脏页比例大于 innodb_max_dirty_pages_cnt, 刷新 inno

C++ 11新特性解析——《深入理解C++ 11:C++11新特性解析和应用》读书笔记

因为偶然的机会,在图书馆看到<深入理解C++ 11:C++11新特性解析和应用>这本书,大致扫下,受益匪浅,就果断借出来,对于其中的部分内容进行详读并亲自编程测试相关代码,也就有了整理写出这篇读书笔记的基础.C++作为踏入编程的最初语言,一直充满感情,而C++11作为新标准虽然推出一段时间了,却因为总总原因直到现在才去开始真正了解,不过一句话回荡在脑中:当你认为为时已晚的时候,恰恰是最早的时候!从C++98到C++11, C++11标准经历了10几年的沉淀,以全新的姿态迎接新的挑战,长话短说,

《Effective C++》读书笔记汇总

我之前边读<Effective C++>边写下每个条款的读书笔记,这一版是C++11之前的版本.这里我将每个条款令我印象深刻的点小结一下. 1.C++包括:Plain C(面向过程).OOP(面向对象).模板(泛型和模板元编程).STL(C++标准库). 2.用inline.enum.const代替#define.#define定义的宏,一旦复杂起来,高手都很难掌控.不要带入C的习惯. 3.灵活使用const前缀.不需要进行改变的数据加上const前缀.指针的const前缀有两种形式,cons

Javascript读书笔记:函数定义和函数调用

定义函数 使用function关键字来定义函数,分为两种形式: 声明式函数定义: function add(m,n) { alert(m+n); } 这种方式等同于构造一个Function类的实例的方式: var add = new Function("m", "n", "alert(m+n);"); Function类构造方法的最后一个参数为函数体:"alert(m+n);",前面的都是函数的形参,参数必须是字符串形式的:&

C#刨根究底:《你必须知道的.NET》读书笔记系列

一.此书到底何方神圣? <你必须知道的.NET>来自于微软MVP-王涛(网名:AnyTao,博客园大牛之一,其博客地址为:http://anytao.cnblogs.com/)的最新技术心得和感悟,将技术问题以生动易懂的语言展开,层层深入,以例说理.全书主要,包括了.NET基础知识及其深度分析,以.NET Framework和CLR研究为核心展开.NET本质论述,涵盖了.NET基本知识几乎所有的重点内容.全书分为5个部分,第1部分讲述.NET与面向对象,从底层实现角度分析了.NET如何实现面向

《大型网站技术架构》读书笔记之六:永无止境之网站的伸缩性架构

此篇已收录至<大型网站技术架构>读书笔记系列目录贴,点击访问该目录可获取更多内容. 首先,所谓网站的伸缩性,指不需要改变网站的软硬件设计,仅仅通过改变部署的服务器数量就可以扩大或者缩小网站的服务处理能力.在整个互联网行业的发展渐进演化中,最重要的技术就是服务器集群,通过不断地向集群中添加服务器来增强整个集群的处理能力. 一.网站架构的伸缩性设计 1.1 不同功能进行物理分离实现伸缩 (1)纵向分离:将业务处理流程上得不同部分分离部署,实现系统的伸缩性: (2)横向分离:将不同的业务模块分离部署

TJI读书笔记11-多态

body, td { font-family: 微软雅黑; font-size: 10pt; } TJI读书笔记11-多态 再说说向上转型 多态的原理 构造器和多态 协变返回类型 使用继承进行设计 多态是数据抽象和继承之后的第三种基本特征. 一句话说,多态分离了做什么和怎么做(再次对埃大爷佩服的五体投地,简直精辟啊). 是从另外一个角度将接口和实现分离开来. 封装通过合并特征和行为来创建新的数据对象,通过私有化隐藏细节,把接口和实现分离开来. 多态则是消除类型之间的耦合关系. 继承是允许将对象视

SQL Server2012 T-SQL基础教程--读书笔记(5-7章)

SQL Server2012 T-SQL基础教程--读书笔记(5-7章) SqlServer T-SQL 示例数据库:点我 Chapter 05 表表达式 5.1 派生表 5.1.1 分配列别名 5.1.2 使用参数 5.1.3 嵌套 5.1.4 多个引用 5.2 公用表表达式 5.2.1 分别列别名 5.2.2 使用参数 5.2.3 定义多个CTE 5.2.4 CTE的多次引用 5.2.5 递归CTE 5.3 视图 5.3.1 视图和ORDER BY 子句 5.3.2 视图选项 5.4 内嵌表

20135327郭皓--读书笔记一

读书笔记一 一.Linux内核简介 1.1 Unix 的历史 Unix 虽然已经使用了 40 年,但计算机科学家仍然认为它是现存操作系统中最强大和最优秀 的系统. 1.2 追寻 Linus 足迹: Linux 简介 Linux 是一个非商业化的产品,这是它最让人感兴趣的特征. 实际上 Linux是一个互联网上 的协作开发项目. Linux 用途广泛,包含的东西也名目繁多. Linux 系统的基础是内核. C库.工具集和系统 的基本工具 一般情况下, Linux这个词汇主要还是指内核. 1.3 操