第一次接触《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. poj:4091:The Closest M Points

    poj:4091:The Closest M Points 题目 描写叙述 每到饭点,就又到了一日几度的小L纠结去哪吃饭的时候了.由于有太多太多好吃的地方能够去吃,而小L又比較懒不想走太远,所以小L会 ...

  2. 前端笔记----类型转换display

    display属性用来在行内元素,块元素,行内块元素之间进行转化. 常用的属性有: 1.none :元素隐藏且不占位置,相当于不存在,一般用在动态展示效果:2.block :元素以块元素显示,有些行内 ...

  3. path和classpath细节

    从学习java的最初我们就被要求先设置path变量和classpath变量.但是这两个环境变量到底有什么作用呢? 1.path环境变量 path环境变量的主要作用是告诉操作系统到哪里去寻找某个程序,如 ...

  4. 【转载】Java系列笔记(1) - Java 类加载与初始化

    Java系列笔记(1) - Java 类加载与初始化 原文地址:http://www.cnblogs.com/zhguang/p/3154584.html 目录 类加载器 动态加载 链接 初始化 示例 ...

  5. Elasticsearch全文搜索——adout

    现在尝试下稍微高级点儿的全文搜索——一项传统数据库确实很难搞定的任务. 搜索下所有喜欢攀岩(rock climbing)的雇员: curl -XGET 'localhost:9200/megacorp ...

  6. 自学Zabbix3.8.4-可视化Visualisation-Slide shows

    Zabbix3.8.4-可视化Visualisation-Slide shows幻灯片 定义好screen之后,我们想了解服务器状况之时,一般会一个个screen点过去,zabbix提供了幻灯片展示方 ...

  7. 基于.NET的弹性及瞬间错误处理库Polly

    本文基本是官方说明的翻译和总结(https://github.com/App-vNext/Polly) 什么是Polly? Polly是一款基于.NET的弹性及瞬间错误处理库, 它允许开发人员以顺畅及 ...

  8. 百度云BCC配置Apache VirtualHost 实现相同域名不同端口访问不同应用

    问题描述:前戏:本人在百度云上购买了BCC虚拟服务,并购买域名,部署应用,可以正常访问(这里一切都很正常^_^). 事情正在起变化:随着开发的不断推进,工程在本地测试成功后,部署到服务器,会发现有些页 ...

  9. 每周.NET前沿技术文章摘要(2017-05-10)

    汇总国内外.NET社区相关文章,覆盖.NET ,ASP.NET和Docker容器三个方面的内容: .NET Debugging .NET core with SOS everywhere 链接:htt ...

  10. 解题思路:best time to buy and sell stock i && ii && iii

    这三道题都是同一个背景下的变形:给定一个数组,数组里的值表示当日的股票价格,问你如何通过爱情买卖来发家致富? best time to buy and sell stock i: 最多允许买卖一次 b ...