很多年前看过Bill Wagner的《Effective C#》第一版,涵盖了C#2.0相关语言特性的最佳实践,教我们怎样更优雅地去编写C#代码,当时觉得受益匪浅。最近拿到了《More Effective C#》第二版,目前看了大概三分之二,让我对C#的的应用有了更深入的了解,书虽没看完,但还是要推荐一下。

《More Effective C#》第二版涵盖到了C#7.0的特性,全书分为5个大的章节,类型处理、API设计、异步编程、并行处理和动态编程,我觉得深入理解前三章便能让您在工作中如虎添翼,学习和了解C#中的一些特性,并且能知道在什么场景下使用这些特性,真正做到了知其然也知其所以然。

只要涉及到编程,总会回归到各种数据类型的操作,怎样合理的使用数据类型,怎样避免一些陷进,这些在第一章中都会涉及到,比如在判断两个对象相等有下面一些原则:

不只是给出了实践的方法,更是说清楚了其中的原委。

一个有追求的程序员,一定不甘心每天只做CRUD,随着经验的增长,您可能需要去编写更下游的程序,需要提供安全、好用、可扩展的方法或接口供上游调用,即便您只是写写WebAPI,依然会被各种端去调用,第二章的API设计会让您少走很多弯路。

比如我们平时在设计类时,碰到需要做拷贝的,就会很自然想到去实现ICloneable接口,书中告诉了我们为什么不要去实现ICloneable接口,以及什么情况下可以去实现ICloneable接口。

还有,在调用.NET一些底层方法时,有时会出现很多的重载版本,那么在我们写代码时,会去借鉴,也会写出有很多重载版本的方法。书中建议我们在初次设计方法时,可以利用可选参数和命名参数来设计方法的参数,可以减少方法的重载版本,但发布后,如果有调整,建议添加重载版本。

第三章讲述了怎样使用异步编程,内容虽然不是很多,但如果您已经使用过异步编程,这些会让您理解更加深刻。下面举一个小例子。

在C#7中加入了本地方法的特性,可以让我们在方法的内部写方法,代码如下:

static void LocalMethod(){    string name = "oec2003";    string name1 = "oec2004";    Console.WriteLine(AddPrefix(name));    Console.WriteLine(AddPrefix(name1));    string AddPrefix(string n)    {        return $"Hello {n}";    }}    string name = "oec2003";    string name1 = "oec2004";

    Console.WriteLine(AddPrefix(name));    Console.WriteLine(AddPrefix(name1));

    string AddPrefix(string n)    {        return $"Hello {n}";    }}

可能您知道有这么一个特性,但并不知道该什么时候用,在不知道的情况下,为了去使用某个特性,可能出现滥用。书中给出了该特性的一个应用场景。看下面一段示例代码:

public Task<string> LoadMessage(string userName){    if (string.IsNullOrWhiteSpace(userName))    {        throw new AggregateException(message: "username is null");    }    return LoadMessageImpl();    async Task<string> LoadMessageImpl()    {        var name = await LoadMessageAsync();        var message = name ?? "No Message";        return message;    }}Task<string> LoadMessageAsync(){    var task = Task.Run(() =>    {        Thread.Sleep(5000);        return "oec2003";    });    return task;}    if (string.IsNullOrWhiteSpace(userName))    {        throw new AggregateException(message: "username is null");    }    return LoadMessageImpl();

    async Task<string> LoadMessageImpl()    {        var name = await LoadMessageAsync();        var message = name ?? "No Message";        return message;    }}Task<string> LoadMessageAsync(){    var task = Task.Run(() =>    {        Thread.Sleep(5000);        return "oec2003";    });    return task;}

本文是我阅读到现在的一个最直观的感受,书中的内容我在理解、消化并进行实践后会继续分享出来。总之,好书是需要反复阅读的,直到看到某一小节的名称便能说出它的来龙去脉,才是真正的掌握。

书籍推荐:《More Effective C#》相关推荐

  1. 书籍推荐:《C#7.0本质论》

    在dotNet平台中有多种开发语言可以使用,C#无疑是其中应用得最为广泛的.学习一门编程语言最好的方式就是找一本好书系统地学习,我读过的关于C#的书籍中,我认为下面三本最为经典: <C#本质论& ...

  2. 计算机专业经典书籍推荐

    计算机专业书籍推荐 一.为何要学编程?   每个人的动机不一样.大致有:   1.为了找个好工作:或为了有更好的机会和更好的发展.   2.看到别人超厉害,所以也想学. 3.实际工作中很多场合需要. ...

  3. 经典算法书籍推荐以及算法书排行【算法四库全书】

    经典算法书籍推荐以及算法书排行[算法四库全书] 作者:霞落满天   https://linuxstyle.blog.csdn.net/    https://blog.csdn.net/21aspne ...

  4. 适合初学者学java技术的书籍推荐!

    想要学会java技术,光靠听课是不够的,看书也是非常重要的一步,以下小编为大家推荐的是适合初学者学java技术的书籍,希望能够给初学者们带来帮助. 适合初学者学java技术的书籍推荐! 1. Java ...

  5. 编程入门python语言是多大孩子学的-我的孩子需要学习Python吗?几岁开始学?有什么书籍推荐?...

    原标题:我的孩子需要学习Python吗?几岁开始学?有什么书籍推荐? 最近有一些家长问我,需不需要让孩子学习Python,孩子学习Python有什么作用? 最近确实有看到不少的机构在宣传Python, ...

  6. 自学python需要买书吗-我的孩子需要学习Python吗?几岁开始学?有什么书籍推荐?...

    近年来,全世界各个企业和政府的都非常青睐Python编程语言. 主要编程语言的发展趋势,图片来自 Stack Overflow在GitHub 2017年度报告中,Python 超越 Java 成第二受 ...

  7. python入门基础代码图-python入门代码指南教程书籍推荐2020总结全集汇总

    python入门代码指南教程书籍推荐2020总结全集汇总 记住,如果您想学习Python,市场上有很多可用的资源.这些可以包括书籍,甚至在线课程..在这篇文章中,我们为Python编写了最好的书籍,无 ...

  8. 十年研发经验嵌入式工程师书籍推荐

    从事嵌入式研发行业十年,认为学习就是要不断的吸纳知识,在研发过程中,经常会遇到一些问题,这种发现问题并解决问题的过程就是进步. 为什么选择学习嵌入式? 嵌入式系统无疑是当前最热门最有发展前途的IT应用 ...

  9. 从零实现来理解机器学习算法:书籍推荐及障碍的克服

     从零实现来理解机器学习算法:书籍推荐及障碍的克服 发表于2015-09-10 16:16| 1261次阅读| 来源Machine Learning Mastery| 2 条评论| 作者Jason ...

  10. python 数据分析 书籍推荐 知乎_Python 爬取知乎 9674 个问答,揭秘最受欢迎的 98 本书!...

    原标题:Python 爬取知乎 9674 个问答,揭秘最受欢迎的 98 本书! 作者 | Yura 责编 | 胡巍巍 高尔基这话有没有道理我不知道, 咱也不敢问, 主要是现在也问不了. 那对我来说,读 ...

最新文章

  1. AngularJs学习笔记(3)--$scope中的$apply和$digest方法
  2. js 如何实现bind
  3. deepin ubuntu修改grub启动延时时间
  4. 继承extends、super、this、方法重写overiding、final、代码块_DAY08
  5. 输入网址后,浏览器从访问服务器到呈现网页的过程
  6. java语言程序设计(基础篇) 第2章 基本程序设计 课本源代码
  7. Gmail推出视频聊天功能 间接否认欲收购Skype
  8. 宏碁4752G换CPU和显卡导热硅脂步骤
  9. spss变量视图转数据视图_SPSS的数据视图和变量视图
  10. 3D游戏建模:3dmax对场景进行布局和建模
  11. Pearson 相关分析 理论与应用
  12. 备战蓝桥杯—2014(4)史丰收速算
  13. .NET Core之EF Core
  14. VMware虚拟机无法自动获取IP地址的解决办法
  15. 粉丝看了教程成功发文章了,恭喜一下,并说下近期计划
  16. Excel匹配两列相同内容到同一行
  17. 使用selenium模拟登录解决滑块验证问题
  18. teamviewer出现无法连接伙伴问题
  19. 亚信Internet中国
  20. 免费影像数据下载网站汇总——2010年7月28[转自ESRI中国]

热门文章

  1. linux显示fio为非法指令,FORTRAN运行错误消息列表中英对照.doc
  2. 面向全球用户的Teams app之夏令时篇
  3. 多点认证wi-fi_准备使用Wi-Fi 6:认证将于2019年第三季度启动
  4. twitter批量取消关注_如何在Twitter上取消阻止“潜在敏感内容”
  5. 如何用grep命令同时显示“匹配行”上下的n行?
  6. Sonnedix收购意大利11.2MW光伏电站产品组合
  7. 《编译与反编译技术》—第1章1.7节C语言程序的编译流程
  8. ELKstack-Elasticsearch各类安装部署方法
  9. MyBatis --教程
  10. 淘宝快捷通道——百汇家园