1.方法组转换
c#2支持一个从方法组到兼容委托类型的隐式转换,即如:
button.click+=new eventhandler(logevent)可以写成
button.click+=logevent。
2.匿名函数的闭包和捕获外部变量
闭包:执行一段代码所需要的上下文。
被捕获的外部变量:在匿名方法内部使用的外部变量。被捕获的是变量本身,而不是变量的值。
在此这段代码即匿名方法。
被捕获的外部变量不存储在栈上,而是创建一个额外的类来容纳(this除外)。
循环外部的captured variable被实例化一次,而在循环内部实例化各自的captured variable(C#5中循环外部的captured variable也被分别实例化)。
3.泛型
类型约束:
引用类型约束:where  T : class
值类型约束:where  T : struct
构造器约束:T : new() 用来约束拥有一个无参构造函数的类型:所有值类型,非静态非抽象没有显式构造函数的类,显式声明了无参构造函数的非抽象类
转换类型约束:类型实参必须可以通过某种方式隐式转换为该约束类型(类型参数约束:一个类型可以隐式转换为另一类型class Sample<T,U> where T : U)
类型推断只适用于泛型方法。
如果没有类型约束,==,!=可以使用,但仅限于和NULL的比较;如果被约束为值类型,则不能使用==,!=;如果是简单引用类型,则进行简单的比较;如果被约束了派生自冲在了==和!=的类型,这些重载将被调用(如果类型参数本身也实现重载,这种重载并不会被调用,因为编译器对此一无所知,编译器在编译未绑定的泛型类型时就解析好了所有函数重载)。
四种泛型比较接口:
IComparer<T>、IComparable<T>用来排序(判断大于小于等于),IEqualityComparer<T>、IEquatable<T>用来判断相等性;
IComparer<T>、IEqualityComparer<T>用来比较两个值,IComparable<T>、IEquatable<T>用来比较其它值与它自身。
4.迭代器
    首先执行MoveNext();之后执行迭代器块的代码;获取Current的值不执行任何代码;执行到yield return后停止;执行下一个MoveNext(),如果返回值为false则停止迭代,否则继续,而不是在最后的yield return处结束(所以如果我们想要finally块的代码被执行,就需要一个 yield break,不过在我们直接使用foreach时不会遇到这个问题,因为foreach最后会调用一个Dispose(),而这会触发finally的执行)。
 
 
 

C# in Depth阅读笔记2:C#2特性的更多相关文章

  1. C# in Depth阅读笔记1:C#1特性

    1.委托 委托是对包含返回值和参数的行为的一种封装,类似于单一方法的接口. 委托是不易变的(就像string),system.delegate下的combine和remove方法都只能产生一个新的委托 ...

  2. C# in Depth阅读笔记3:C#3特性

    1.隐式类型 var a=new Dictionary<string ,list<person>>();可以简化代码,增强可读性. 2.简化初始化 (1)设置简单属性 Pers ...

  3. Mongodb Manual阅读笔记:CH5 安全性

    5 安全性 Mongodb Manual阅读笔记:CH2 Mongodb CRUD 操作Mongodb Manual阅读笔记:CH3 数据模型(Data Models)Mongodb Manual阅读 ...

  4. 阅读笔记 1 火球 UML大战需求分析

    伴随着七天国庆的结束,紧张的学习生活也开始了,首先声明,阅读笔记随着我不断地阅读进度会慢慢更新,而不是一次性的写完,所以会重复的编辑.对于我选的这本   <火球 UML大战需求分析>,首先 ...

  5. [阅读笔记]Software optimization resources

    http://www.agner.org/optimize/#manuals 阅读笔记Optimizing software in C++   7. The efficiency of differe ...

  6. 《uml大战需求分析》阅读笔记05

    <uml大战需求分析>阅读笔记05 这次我主要阅读了这本书的第九十章,通过看这章的知识了解了不少的知识开发某系统的重要前提是:这个系统有谁在用?这些人通过这个系统能做什么事? 一般搞清楚这 ...

  7. <<UML大战需求分析>>阅读笔记(2)

    <<UML大战需求分析>>阅读笔记(2)> 此次读了uml大战需求分析的第三四章,我发现这本书讲的特别的好,由于这学期正在学习设计模式这本书,这本书就讲究对uml图的利用 ...

  8. uml大战需求分析阅读笔记01

    <<UML大战需求分析>>阅读笔记(1) 刚读了uml大战需求分析的第一二章,读了这些内容之后,令我深有感触.以前学习uml这门课的时候,并没有好好学,那时我认为这门课并没有什 ...

  9. Hadoop阅读笔记(七)——代理模式

    关于Hadoop已经小记了六篇,<Hadoop实战>也已经翻完7章.仔细想想,这么好的一个框架,不能只是流于应用层面,跑跑数据排序.单表链接等,想得其精髓,还需深入内部. 按照<Ha ...

随机推荐

  1. 【HDU 2013 猴子吃桃子】 尾递归与迭代

    大一时的一道C语言练习题,可作为递归和尾递归转迭代的范例.HDU 2013 http://acm.hdu.edu.cn/showproblem.php?pid=2013 题意:猴子摘了sum个桃子,从 ...

  2. 【HDU】4092 Nice boat(多校第四场1006) ——线段树 懒惰标记

    Nice boat Time Limit: 30000/15000 MS (Java/Others)    Memory Limit: 131072/131072 K (Java/Others) To ...

  3. C#打印条码BarTender SDK打印之路和离开之路(web平凡之路)

    从来没想过自己会写一篇博客,鉴于这次从未知的探索到一个个难点的攻破再到顺利打印,很想记录这些点滴,让后人少走弯路. 下面走进正题. 需求:取数据库里的相应的字段数据,并生成条形码,可以批量.单条打印. ...

  4. MD5和SHA512Managed ——哈希算法

    本文来自:http://www.cnblogs.com/chuncn/archive/2008/02/26/1082418.html C#的哈希 哈希算法是啥?哈希英文hash,是一种数学算法,它能把 ...

  5. [AS3]as3用ByteArray来对SWF文件编码加密实例参考

    [AS3]as3用ByteArray来对SWF文件编码加密实例参考,简单来说,就是将 swf 以 binary 的方式读入,并对 ByteArray 做些改变,再重新存成 swf 档.这个作业当然也可 ...

  6. IOS(swift)-数据存储 · 用NSUserDefaults存储配置信息

    1.用NSUserDefaults存储配置信息 注:本次使用NSUserDefaults存储信息是在不考虑安全问题的前提下.分两种情况:1.如果是密码用户名等敏感信息,请使用Keychain存储用户敏 ...

  7. 连接时出现:Can&#39;t open display: localhost:10.0

    解决方法: 在/etc/hosts 中增加 127.0.0.1 localhost ipaddress hostname 之后能进入图形界面,注意是实际ip和机器名 $(function () { $ ...

  8. 【Tarjan,LCA】【3-21个人赛】【problemD】

    Problem D Time Limit : 6000/3000ms (Java/Other)   Memory Limit : 65535/32768K (Java/Other) Total Sub ...

  9. idea git merge代码

    1.点击idea 右下角的红框区域 2.出现如下截图,第一个红框是本地dev merge,也就是说可以从从本地的dev仓库merge,第二个红框表明可以从远程的git dev merge 第三个红框表 ...

  10. IIS中如何建立FTP服务

    文件传输协议 (FTP) 是一个标准协议,可用来通过 Internet 将文件从一台计算机移到另一台计算机.这些文件存储在运行 FTP 服务器软件的服务器计算机上.然后,远程计算机可以使用 FTP 建 ...