前言:陆续使用C#已经有一年半的时间。中间做过一些应用,现在为了有更高的提升,决定重新看一遍C# in depth,并总结一些笔记。

一、从简单的数据类型开始

上面是C#1到C#4中的一部分演变历程。可以看到C#演变为越来越好的封装性、越来越强的类型化以及越来越容易的初始化。

二、排序和过滤

弱类型有很多缺点,首先必须针对每个特定的类型实现一个排序的类型,在C#2中出现了泛型,可以创建一个统一的排序算法,同时C#2的匿名方法(更方便的创建委托)使得可以直接传入一个委托进行比较,语法上的便捷加快了程序的编写进度。在C#3中出现的lambda表达式是匿名方法更好用,使代码更易读。同时,C#3的扩展方法使得在不改变原有类的基础上为原有类提供新的功能,并且调用起来就像是实例方法一样方便。

三、处理未知数据

C#2的可空值类型为我们添加了一个便捷的语法糖比如我们可以用int?来表示一个可为空值的值类型。他表示的实际类型是一个Nullable<T>,这为我们在编写数据库方面的编程时更加有效率。在参数未知的情况下,C#4的可选参数为那些由客户端(方法调用方)传入的实参提供了一个默认值,以防止传入一些无效的参数。有了Nullable<T>,在处理数据集类型时,泛型配合lambda表达式也能够处理一些null值。如lst.where(p=>p.value==null)。其中value是一个int?类型的数据。

四、LINQ简介

LINQ是一个非常棒的C#特性,前后经历了几个版本的铺垫最终成型。他允许我们像操作数据库一个操作内存中的数据,当然也可以通过IQuerable来编写表达式并最终在数据库中进行查询。为了LINQ,C#催生出像隐式局部变量(var)、匿名类型、匿名方法、lambda等(匿名方法和lambda都属于委托的概念范畴)等概念来互相配合直到最后产生的LINQ这个概念。当然,上述提到的那些概念单独使用起来也很棒。

五、COM和动态类型

C#4的一个最大的特性就是动态类型和互操作。内建了一个DLR(动态语言运行时),这允许我们像使用python一样使用dynamic关键字来使用动态类型。并且允许我们与想IronPython这样的语言来交互。

六、轻松编写异步代码

C#5最大的特性就是改善异步,新推出的async和await关键字使之前意大利面条式的异步代码消失不见,转而使用一种类似同步的代码来表达异步的思想。

上面就是C#进化的一个总体的过程。接下来会逐步探索C#中的难点

C#复习笔记(1)--C#开发的进化史的更多相关文章

  1. Java基础复习笔记基本排序算法

    Java基础复习笔记基本排序算法 1. 排序 排序是一个历来都是很多算法家热衷的领域,到现在还有很多数学家兼计算机专家还在研究.而排序是计算机程序开发中常用的一种操作.为何需要排序呢.我们在所有的系统 ...

  2. Angular复习笔记6-依赖注入

    Angular复习笔记6-依赖注入 依赖注入(DependencyInjection)是Angular实现重要功能的一种设计模式.一个大型应用的开发通常会涉及很多组件和服务,这些组件和服务之间有着错综 ...

  3. angular复习笔记4-模板

    Angular复习笔记4-模板 简介 模板是一种自定义的标准化页面,通过模板和模板中的数据结合,可以生成各种各样的网页.在Angular中,模板的默认语言是HTML,几乎所有的HTML语法在模板中都是 ...

  4. 状压DP复习笔记

    前言 复习笔记第4篇.CSP RP++. 引用部分为总结性内容. 0--P1433 吃奶酪 题目链接 luogu 题意 房间里放着 \(n\) 块奶酪,要把它们都吃掉,问至少要跑多少距离?一开始在 \ ...

  5. Java编程思想重点笔记(Java开发必看)

    Java编程思想重点笔记(Java开发必看)   Java编程思想,Java学习必读经典,不管是初学者还是大牛都值得一读,这里总结书中的重点知识,这些知识不仅经常出现在各大知名公司的笔试面试过程中,而 ...

  6. Java基础复习笔记系列 九 网络编程

    Java基础复习笔记系列之 网络编程 学习资料参考: 1.http://www.icoolxue.com/ 2. 1.网络编程的基础概念. TCP/IP协议:Socket编程:IP地址. 中国和美国之 ...

  7. Java基础复习笔记系列 八 多线程编程

    Java基础复习笔记系列之 多线程编程 参考地址: http://blog.csdn.net/xuweilinjijis/article/details/8878649 今天的故事,让我们从上面这个图 ...

  8. Java基础复习笔记系列 七 IO操作

    Java基础复习笔记系列之 IO操作 我们说的出入,都是站在程序的角度来说的.FileInputStream是读入数据.?????? 1.流是什么东西? 这章的理解的关键是:形象思维.一个管道插入了一 ...

  9. Java基础复习笔记系列 五 常用类

    Java基础复习笔记系列之 常用类 1.String类介绍. 首先看类所属的包:java.lang.String类. 再看它的构造方法: 2. String s1 = “hello”: String ...

  10. Java基础复习笔记系列 四 数组

    Java基础复习笔记系列之 数组 1.数组初步介绍? Java中的数组是引用类型,不可以直接分配在栈上.不同于C(在Java中,除了基础数据类型外,所有的类型都是引用类型.) Java中的数组在申明时 ...

随机推荐

  1. 一文读懂SpringCloud与Eureka,Feign,Ribbon,Hystrix,Zuul核心组件间的关系

    概述 毫无疑问,Spring Cloud是目前微服务架构领域的翘楚,无数的书籍博客都在讲解这个技术.不过大多数讲解还停留在对Spring Cloud功能使用的层面,其底层的很多原理,很多人可能并不知晓 ...

  2. Sublime 汉化、快捷键打开浏览器

    Sublime 是一个优秀的代码编译工具,它具有漂亮的用户界面和强大的功能,例如代码缩略图,Python 的插件,代码段等.不仅如此,它还可自定义按键绑定,菜单和工具栏.由于是歪果仁开发的,所以官方版 ...

  3. props default 数组/对象的默认值应当由一个工厂函数返回

    export default {props: { slides:{ type:Array, default:[] } },这是我的代码 报错是Invalid default value for pro ...

  4. 给 datepicker 设定日期格式

    datepicker 是 JQueryUI 提供的日期控件,仅提供日期选择,不提供时间,但基本够用了. 其日期格式默认是:mm/dd/yy 格式字符代表的含义如下: d - 每月的第几天 (没有前导零 ...

  5. Scrapy 框架 手动发送请求 POST 请求的发送

    手动发送请求 import scrapy from choutiSpider.items import ChoutispiderItem class ChoutiSpider(scrapy.Spide ...

  6. raise ValueError("Cannot convert {0!r} to Excel".format(value))

    I have hundreds of XML files that I need to extract two values from and ouput in an Excel or CSV fil ...

  7. JAVA序列化和反序列化XML

    package com.lss.utils; import java.beans.XMLDecoder; import java.beans.XMLEncoder; import java.io.Bu ...

  8. vue methods 中方法的相互调用

    vue在同一个组件内:方法之间经常需要互相调用. methods中的一个方法如何调用methods中的另外一个方法呢? 可以在调用的时候使用  this.$options.methods.test2( ...

  9. xss攻击(跨站脚本)

    原理跨站脚本(Cross site script,简称xss)是一种“HTML注入”,由于攻击的脚本多数时候是跨域的,所以称之为“跨域脚本”. 我们常常听到“注入”(Injection),如SQL注入 ...

  10. 08 python 初学(字典)

    字典是 python 中唯一的映射类型 .采用键值对(key-value)的形式存储数据. python 对 key 进行哈希函数运算,根据计算的结果决定 value 的存储地址,所以字典时无需存储的 ...