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. IP地址分类与识别错误

    //描述:  请解析IP地址和对应的掩码,进行分类识别.要求按照A/B/C/D/E类地址归类,不合法的地址和掩码单独归类. //所有的IP地址划分为 A,B,C,D,E五类 //A类地址1.0.0.0 ...

  2. google地图marker文字label添加js lib

    google的地图marker需要使用js开发库,文件并允许使用js库 在JSP页面中需要添加地图引用如: <script src="http://maps.googleapis.co ...

  3. [Leetcode][Python]53: Maximum Subarray

    # -*- coding: utf8 -*-'''__author__ = 'dabay.wang@gmail.com' 53: Maximum Subarrayhttps://leetcode.co ...

  4. Redis 实践笔记

    本文来自:http://www.cnblogs.com/me-sa/archive/2012/03/13/redis-in-action.html 最近在项目中实践了一下Redis,过程中遇到并解决了 ...

  5. c#中(int)、int.Parse()、int.TryParse、Convert.ToInt32的区别

    本文来自:http://blog.csdn.net/tangjunping/article/details/5443337 以前经常为这几种数据类型转换方式而迷茫,这次为了彻底搞清它们之间的区别和优缺 ...

  6. PHP高级特性基础

    php对象在内存中的区域:php对象名和对象存放的位置是不一样的,这一点和java是一模一样的,所以在php面向对象部分你完全可以套用java的思想去做.对象存放在堆区(heap)而对象名则和其他普通 ...

  7. Asp.Net(C#) MD5 加密

    /// <summary> /// MD5 字符串加密  /// </summary> /// <param name="str">需要加密的字 ...

  8. Flash Recovery Area空间不足导致DB不能打开或hang住处理方法

    当归档目录设置在闪回恢复区,并且闪回恢复区又满了的情况下, DB 就会无法归档而hang住或者无法打开. 这种情况下打开数据库会遇到如下错误信息: SQL> select status from ...

  9. 白话JAVA守护线程

    OneCoder(苦逼Coder)原创,转载请务必注明出处: http://www.coderli.com/archives/daemon-thread-plain-words/ 关于“白话”:偶然想 ...

  10. 系统分层 manager层意义

    manager用于控制事务,通常是这么说的,但是如果把事务空指针service可以的,但是有些时候,service加了Transaction注解之后,在加别的注解,可能导致Transaction失效. ...