第一次接触《C#本质论》是在这个链接。那时候刚学写C#,而且它的语言风格深深吸引了我,噢对了还有它强大的IDE——VS。这个链接里的书确实不错。文中提到:

虽然这三本书都是外国原著的,但是却不像其他系列书一样中文译版和原版版本相差很大,可以说翻译工作几乎同步。

1. 《果壳中的C#》

去年双十一在亚马逊看到原版书(第四版)降价,好不容易下单了,等了一个月没发货(海外淘)就取消订单了。在图书馆看过最新的中文版本也就第三版,没看过没太多话语权,等下学期预约了这本书(太抢手了!)看看再写评论。

2. 《精通C#》

这本书我看过第六版的中文本。和大部分国内的C#教程一样,还是以WinForm作为切入点。这本书很厚,1k页是妥妥的,但是不同版本厚度不同,我记忆中中文版的第六版比第五版少个一两百页。

最让我受益部分是操作数据库部分,也是我第一次接触连接字符串这个概念(其实是我当时需要这一块的知识,所以印象深刻)。书中关于操作数据库的篇幅不算多,只能是启发式。

本书也是三本书里最容易读懂的,《果壳中的C#》我看过目录和第一章,还是有难度的;《C#本质论》等下说。这本书如果读完了,基本上能看懂大部分的C#源码了。之前在知乎上看过有人问如何学习C#,有个人说自己看完了这本书,不知道下一步该怎么办?高赞回答是找项目做,并且其他C#入门书可以不用再看了。

对于不是特别牛逼的本科生,除非你接触了不少C#的项目,不然我是推荐这本书作为入门书和放旁边随时查阅。

3. 《C#本质论》

这本书也是我最近看的一本C#知识的书。好不容易找到了一个.NET的实习,但是半年没写C#了,所以就借了本C#的书(满足我的几点要求:讲授C#语法知识,不会特别厚,不从WinForm切入,尽可能地新版本C#5.0或以上)。

先上结论:我个人看来这本的定位不是入门书,而是那些已经有一定的C#代码开发经验的人作为身边的资料查阅书。

前4章还好,讲控制流,数据类型什么的,还算是浅显。第五章开始讲类,很多概念没辨认清楚,而且也拗口,例如看完我还是不知道字段和属性有什么不同。后面的更加不说了。而且这本书已经涉及了不少CLR和CIL的知识了,这些比较底层,如果没有一定的开发经验真的看不懂。有人会说我们可以忽略不懂的部分,但是从新人角度看,怎么忽略?当你设身处境的时候你会发现你根本做不到忽略,很客观的一个因素是如果内容为1,能看懂的部分不一定超过0.5呢(译者要背一定的锅),这怎么可能是一本入门书,只会让入门者打击自信。

当然又优点,其实缺点也是优点:如果是那些开发了一定的C#项目,想了解CLR和CIL,但是《CLR via C#》又看不懂,那么《C#本质论》应该可以作为一个跳板,顺便还能复习捡漏(书中特别多拓展知识,即使是简单的语法知识也会拓展,这部分新人不一定能看懂)。我欣赏这本书的一个原因是它不讲WinForm,很纯粹地讲C#,当然这也造成它不同其他入门书那样容易通读和理解。

我第一次看这本书看了1/4,发现驾驭不了。第二次,也就是这段时间,看了1/2,看到委托和Lambda表达式,发现很多东西也驾驭不了,打算弃疗了。拓展知识实在太多了,很多东西消化不了。而且有些拓展知识讲得太细了,例如会跟你拓展一些其他写法,但是这些写法在实际开发中哪个王八蛋会用这么操蛋的写法?还是好好修炼到要接触CLR和CIL的时候再看这本书吧~

当然了,有些知识点这本书解释得不错,例如委托!这三天看了不少委托的例子,唯一让我入脑的是一篇以“一切都是对象”的观点来解释的帖子,之前分享过。大致就是说C#里的委托和现实中的委托是一样的,你委托为别人做一件事,你和别人都是对象,做的这件事你没必要会,别人会的话,你委托别人做就好。有人会说可以在自己的类里申明别人的类,然后调用别人的方法也可以做到。是的,问题是,如果你委托很多人做事呢?这个问题在此不深究,等我真的理解了再另写帖子。

《C#本质论》里解释委托用的是冒泡排序,正常下升序和降序是写死了。如果说调用者希望指定升降序,则要写两个一模一样的函数。第一个解决方法是多传入一个参数接收升降序的标志,然后再比较相邻两元素前判断标志来执行对应的条件表达式。这么做也有问题,因为只照顾了两种排序,如果是字典排序呢?或者根本就不是简单的值类型排序呢?如果此时还用上面的方法那岂不是很累赘?因此这时我们可以换一种思路,传进来的那个升降序标志不再是我们所理解的一个值,而是一种能比较的方法!即排序这个方法委托它来完成“比较”这件事。循循善诱还引出了lambda表达式的用途!让我对委托和lambda表达式又有了新的理解。给出书上的代码和我自己的一些注释~

     class DelegateSample
{
// 声明嵌套的委托数据类型
public delegate bool ComparisonHandler(int first, int second); public static void BubbleSort(int[] items, ComparisonHandler comparisonMethod)
{
int i;
int j;
int temp; if(comparisonMethod == null)
{
throw new ArgumentNullException("comparisonMethod");
} if(items == null)
{
return;
} for (i = items.Length - ; i >= ; i--)
{
for (j = ; j <= i; j++)
{
if (comparisonMethod(items[j - ], items[j]))
{
temp = items[j - ];
items[j - ] = items[j];
items[j] = temp;
}
}
}
} //兼容上面声明委托的一个方法:注意到它的签名:同返回值,同参数列表
public static bool GreaterThan(int first, int second)
{
return first > second;
} static void Main()
{
int i;
int[] items = new int[]; for (i = ; i < items.Length; i++)
{
Console.Write("Enter an integer: ");
items[i] = int.Parse(Console.ReadLine());
} BubbleSort(items, GreaterThan);
//BubbleSort(items, (first, second)=> { return first < second; });
//注意到上面的那个方法声明比主体还长!所以就有了简洁的Lambda表达式! for (i = ; i < items.Length; i++)
{
Console.WriteLine(items[i]);
}
}
}

《C#本质论》里不缺乏这种用简单的例子解释一个很好概念。我想着就是多看书的原因之一,不同作者对同一个事物的理解不同,总有人的理解能让你茅塞顿开。

那么,期待下次再见,《C#本质论》。

2017-07-20 Thursday

不再用Markdown语法写博客园文章了,发现博客园对Markdown的渲染效果并不好。

2017-07-20聊聊《C#本质论》的更多相关文章

  1. 日本IT行业劳动力缺口达22万 在日中国留学生迎来就业好时机 2017/07/18 11:25:09

    作者:倪亚敏 来源:日本新华侨报 发布时间:2017/07/18 11:25:09     据日本政府提供的数据,日本2018年应届毕业生的“求人倍率”已经达到了1.78倍.换言之,就是100名大学生 ...

  2. 2021.07.20 P3951 小凯的疑惑(最大公因数,未证)

    2021.07.20 P3951 小凯的疑惑(最大公因数,未证) 重点: 1.最大公因数 题意: 求ax+by最大的表示不了的数(a,b给定 x,y非负). 分析: 不会.--2021.07.20 代 ...

  3. 2021.07.20 CF1477A Nezzar and Board(最大公因数,未证)

    2021.07.20 CF1477A Nezzar and Board(最大公因数,未证) CF1477A Nezzar and Board - 洛谷 | 计算机科学教育新生态 (luogu.com. ...

  4. 2017/05/20 java 基础 随笔

    static 关键字的特点 1.随着类的加载而加载 2.优先于对象存在 3.被类的所有对象共享 如果某个成员变量是被所有对象共享的,那么他就应该定义为静态的 4.可以通过类名调用 其实它本身也可以通过 ...

  5. 2017/11/20 Leetcode 日记

    2017/11/14 Leetcode 日记 442. Find All Duplicates in an Array Given an array of integers, 1 ≤ a[i] ≤ n ...

  6. 2017.9.20 HTML学习总结----下拉列表标签

    接上: 1.下拉列表框<option>,<selcct> (1)解释:在表单中,通过option select标记可设计一个下拉式的列表或带有滚动条的列表, 用户可以在列表中选 ...

  7. 2017.2.20 activiti实战--第五章--用户与组及部署管理(一)用户与组

    学习资料:<Activiti实战> 第五章 用户与组及部署管理(一)用户与组 内容概览:讲解activiti中内置的一套用户.组的关系,以及如何通过API添加.删除.查询. 5.1 用户与 ...

  8. 2017.5.20欢(bei)乐(ju)赛解题报告

    预计分数:100+20+50=first 实际分数:20+0+10=gg 水灾(sliker.cpp/c/pas) 1000MS  64MB 大雨应经下了几天雨,却还是没有停的样子.土豪CCY刚从外地 ...

  9. Cheatsheet: 2013 07.09 ~ 07.20

    Mobile How to implement Android Splash Screen Migrating iOS MVC Applications to Windows Phone 8 (M-V ...

  10. Cheatsheet: 2013 06.23 ~ 06.30, Farewell GoogleReader(2008.07.20~2013.06.30)

    Mobile Resources for Mac and iOS Developers- Introduction to Objective-C Modules Other 10 Principles ...

随机推荐

  1. 人工智能背景下的Office 365现状和发展趋势

    作者:陈希章 发表于 2017年7月31日 引子 谈论人工智能是让人兴奋的,因为它具有让人兴奋的两大特征 -- 每个人都似乎知道一点并且以知道一点为荣,但又好像没多少人能真正讲的明白.毫无疑问,我也仅 ...

  2. 【ASP.NET】DataTable序列化

    问题描述 主要解决DataTable数据转化为JSON,从Controller传递数据给View的问题. 1   内容区 提供如下方法,仅供参考 public static class ObjectE ...

  3. django的CMS系统(内容管理系统)

    一.什么是CMS系统 CMS具有许多基于模板的优秀设计,可以减少开发的成本. CMS的功能并不只限于文本处理,它也可以处理图片.Flash动画.声像流.图像甚至电子邮件档案. CMS还分各个平台脚本种 ...

  4. 青否云 - 小程序待办事项 wxapp开源系统

    青否云最新开源系统:小程序待办事项 wxapp-demo 青否云 小程序 demo 下载地址:https://github.com/qingful/wxapp-demo 官网 http://cloud ...

  5. 利用grep-console插件使Intellij idea显示多颜色调试日志

    由于Intellij idea不支持显示ascii颜色,grep-console插件能很好的解决这个问题,下面就以开发JavaEE项目中,结合Log4j配置多颜色日志输出功能. 安装grep-cons ...

  6. NodeJs学习笔记(四)---单元测试

         sailsjs框架用了一段时间了,感觉如果功能复杂了,非常难以处理,想用一下单元测试,看是否能解决问题.     sailsjs的官方文档使用的是mocha,我搜索了一些资料,主要参考了朴灵 ...

  7. C语言课程设计(成绩管理系统)

    C语言课程设计(成绩管理系统) 翻到了大学写的C语言课程设计,缅怀一下 内容: 增加学生成绩 查询学生成绩 删除 按照学生成绩进行排序 等 #include <stdio.h> #incl ...

  8. 基于CDH 5.9.1 搭建 Hive on Spark 及相关配置和调优

    Hive默认使用的计算框架是MapReduce,在我们使用Hive的时候通过写SQL语句,Hive会自动将SQL语句转化成MapReduce作业去执行,但是MapReduce的执行速度远差与Spark ...

  9. 视觉SLAM的数学表达

    相机是在某些时刻采集数据的,所以只关心这些时刻的位置和地图. 就把这一段时间的运动变成了李三时刻 t=1,2,...K当中发生的事情. 在这些事可,x表示机器自身的位置. x1,x2,x3,x4... ...

  10. ASP.NET Core MVC中的 [Required]与[BindRequired]

    在开发ASP.NET Core MVC应用程序时,需要对控制器中的模型校验数据有效性,元数据注释(Data Annotations)是一个完美的解决方案. 元数据注释最典型例子是确保API的调用者提供 ...