C#语言的演化
概述 
演化细节 
参考资料 
纲目
1 概述
C# 1 核心 
Struct和Class 
Delegate和Event
C# 2 演进 
泛型 
yield简化迭代器
C# 3 Rock 
LINQ(声明式编程) 
Lambda表达式
C# 4 动态 
dynamic
C# 5 异步 
async和await
2 演化细节
C# 1 
值类型的装箱和拆箱 
枚举显式赋值
C# 1 
枚举自动赋值 
dammit 
Post = 1 Post = 2
C# 1 
枚举权限控制
C# 1 
枚举Flags 
Push, Post 
6
C# 1 
反射 
const和readonly const引发版本问题
C# 1 
params 
using语句 
(IDisposable)
C# 1
C# 1 
XML单行注释
C# 1 
virtual和 
override
C# 1 
new 关键字
C# 1 
三元运算符 
隐式转换和显式转换
C# 1 
转义序列
C# 1 
round-trip 格式化
C# 1 
BeginXXX和EndXXX模式 
(APM)
C# 1 
预处理器指令
C# 1 
迭代器 
实现IEnumerable接口 
实现状态机IEnumerator:Current、MoveNext、 
Reset 
手动维护内部状态(容易出错)
C# 1 
其他 
优先使用foreach 
string是不可变的 
换行Environment.NewLine 
终结器~ 
unsafe 语句块中使用指针 
用delegate和event 替换观察者模式
C# 2 
.NET Framework泛型类 
List<T>, Dictionary<TKey, TValue>, Queue<T>, 
Stack<T>, HashSet<T>, etc... 
可空Struct
C# 2 
自定义泛型类和泛型方法
C# 2 
用yield return和yield break 
简化迭代器实现
C# 2 
out和ref 
Encoding
C# 2 
checked和unchecked 
OverflowException 
分部类
C# 2 
属性访问控制 
as和is 
空合并操作符
C# 2 
简化delegate实例的创建 
C# 1 
C# 2
C# 2 
匿名方法 
忽略 
委托 
参数
C# 2 
InternalsVisibleToAttribute 
delegate 协变/逆变
C# 2 
其他 
StringBuilder 
泛型约束 
泛型委托 
使用DynamicMethod和ILGenerator替换反射 
TryXXX模式 
XML多行注释 
default运算符 
sealed关键字 
using 命名空间别名、类型别名 
extern 外部别名 
FindAll方法 
用delegate 替换工厂方法模式
C# 3 
Lambda表达式 
C# 2 
C# 3
C# 3 
匿名类型 
隐式类型[数组] 
对象和集合初始化器
C# 3 
扩展方法(理智使用)
C# 3 
LINQ to Objects 
(IEnumerable<T>)
C# 3 
LINQ to XML
C# 3 
属性自动实现 
C# 2 C# 3
C# 3 
分部方法
C# 3 
其他 
查询表达式 
标准查询操作符 
表达式树 
IQueryable和IQueryProvider 
LINQ to XXX 
Parallel LINQ 
Func<...> 
ConvertAll方法 
匿名类型的不足
C# 4 
可选参数 
(有效减少方法重载) 
lock的变化
C# 4 
.NET 4之前 
现在 
改进
C# 4 
与动态语言互操作
C# 4 
其他 
DynamicAttribute 
接口和委托的泛型可变性: 
Action<in T>、Func<in T, out TResult> 
命名参数 
TPL 
并行集合 
Tuple<...> (返回多个值) 
简化COM互操作 
DLR
C# 5 
使用async和await 
简化异步编程
C# 5 
async和await 
(本质:状态机)
C# 5 
C# 5之前的异步编程 
APM模式(CPS with AsyncCallback) 
EAP模式 
Background Worker模式
3 参考资料
1.《C# in Depth》(《深入理解C#》) 
2.《Essential C#》(《C#本质论》) 
3. Anders Hejlsberg的视频: 
The Future of C# 
C# 4.0 and beyond
Trends and Future Directions in Programming 
Languages 
The Future of C# and Visual Basic 
4. C# REPL: 
CShell 
Mono C# REPL 
VisualStudio C# REPL
Thanks!

C#语言的演化