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. Visual C++编程命名规则

    一.程序风格:      1.严格采用阶梯层次组织程序代码:      各层次缩进的分格采用VC的缺省风格,即每层次缩进为4格,括号位于下一行.要求相匹配的大括号在同一列,对继行则要求再缩进4格.例如 ...

  2. json概述及python处理json等数据类型

    <一,概念> 序列化(Serialization):将对象的状态信息转换为可以存储或可以通过网络传输的过程,传输的格式可以是JSON.XML等.反序列化(deserialization): ...

  3. swift学习二:基本的语法

    声明本文转载自:http://www.cocoachina.com/applenews/devnews/2014/0603/8653.html Swift是什么? Swift是苹果于WWDC 2014 ...

  4. 【STL】算法 — partial_sort

    partial_sort接受一个middle迭代器,使序列中的middle-first个最小元素以递增顺序排序.置于[first, middle)内.以下是測试代码: #include <ios ...

  5. 网络配置——Linux运维基础

    今天把Linux的网络配置总结了一下,尽管并不难可是是个比較重要的基础.然后我也不知到自己以后是否会做运维,可是我知道自己比較喜欢刨根问底.还有就是我很珍惜我以前掌握过的这些运维的技能.今天突然间问自 ...

  6. iOS 各种传值方式

    属性传值 将A页面所拥有的信息通过属性传递到B页面使用 B页面定义了一个naviTitle属性,在A页面中直接通过属性赋值将A页面中的值传到B页面. A页面DetailViewController.h ...

  7. Codeforces #245(div2)

    A:A. Points and Segments (easy) 题目看了n久,開始认为尼玛这是div2的题目么,题目还标明了easy.. 意思是给你一n个点,m个区间,在n个点上放蓝球或者红球,然后让 ...

  8. C# 几种退出程序的方式

    C# WinForm程序退出的方法 1.this.Close(); 只是关闭当前窗口,若不是主窗体的话,是无法退出程序的,另外若有托管线程(非主线程),也无法干净地退出: 2.Application. ...

  9. filestream 读取视频文件

    class Program { static void Main(string[] args) { string source = @"F:\361\android studio\4.0\亲 ...

  10. tcp窗口滑动以及拥塞控制

    转自:http://blog.chinaunix.net/uid-26275986-id-4109679.html TCP协议作为一个可靠的面向流的传输协议,其可靠性和流量控制由滑动窗口协议保证,而拥 ...