《Effective C#》快速笔记 - C# 中的动态编程
静态类型和动态类型各有所长,静态类型能够让编译器帮你找出更多的错误,因为编译器能够在编译时进行大部分的检查工作。C# 是一种静态类型的语言,不过它加入了动态类型的语言特性,可以更高效地解决问题。
本系列
《Effective C#》快速笔记(一)- C# 语言习惯
《Effective C#》快速笔记(二)- .NET 资源托管
《Effective C#》快速笔记(三)- 使用 C# 表达设计
《Effective C#》快速笔记(五) - C# 中的动态编程
一、目录
- 三十八、理解动态类型的优劣
- 三十九、使用动态类型表达泛型类型参数的运行时类型
- 四十、将接受匿名类型的参数声明为 dynamic
- 四十一、用 DynamicObject 或 IDynamicMetaObjectProvider 实现数据驱动的动态类型
- 四十二、如何使用表达式 API
- 四十三、使用表达式将延迟绑定转换为预先绑定
- 四十四、尽量减少在公有 API 中使用动态类型
三十八、理解动态类型的优劣
1.当你需要要不知道具体类型的运行时解析方法的时候,动态类型是最佳的工具。
2.优先使用静态类型,静态类型比动态类型更高效。
3.若你能控制程序中所有涉及的类型时,可以引入一个接口,而不是动态类型,即基于接口编程,并让所有需要支持该接口行为的类型都实现该接口。通过 C# 类型系统可以减少代码在运行时所产生的错误,编译器也能够生成更加高效的代码。
三十九、使用动态类型表达泛型类型参数的运行时类型
1.Convert<T> 要比 Cast<T> 适用性更广。
四十、将接受匿名类型的参数声明为 dynamic
1.不要过度使用动态类型,因为动态调用会增加系统的额外开销,即便不大。
2.扩展方法不能基于动态对象定义。
四十一、用 DynamicObject 或 IDynamicMetaObjectProvider 实现数据驱动的动态类型
1.创建带有动态功能的类型的最简单的方法就是继承 System.Dynamic.DynamicObject。若能直接继承 DynamicObject,那么创建动态类就会比较简单。
四十二、如何使用表达式 API
四十三、使用表达式将延迟绑定转换为预先绑定
四十四、尽量减少在公有 API 中使用动态类型
1.优先使用 C# 的静态类型,并尽可能地降低动态类型的作用范围。若是想一直使用动态特性,你应该直接选用一种动态语言,而非 C#。
2.若要在程序中使用动态特性,请尽量不要在公有接口中使用,这样会将动态类型限制在一个单独的对象(或类型)中。
【博主】反骨仔
【原文】http://www.cnblogs.com/liqingwen/p/6816100.html
【GitHub】https://github.com/liqingwen2015/XMind 可以下载 XMind
【参考】《Effective C#》