本书基于《CLR via C#》第3版,在保持上一版精华内容的同时进行了大量修订,并添加了大量关于C# 5.0新特性的内容。翻译这一版的过程中,我对上一版也进行了精校和勘误,其中许多勘误和改进意见都是热心读者提交的。在此要对他们表示衷心感谢!他们包括但不限于:
56xue,Castor,DamnnnSure,JeffFan,Jeffrey You,Kenny Wang,LuckyDogFace,Neil,Titus,charlesgeorge,dream-like,fanfan,frank,hongkunjiang,huihui,kman,liu888bingsong,negy_liang,ooooo84,quark,sd,skyiv,wu,wukun0502,wzhou,yeahe83,北纬49°的雨,笨笨,不世出的CLR小白,大支豬與小蘋果,何苦,来客心动,飘荡,飘飘白云,气万象千,千年一梦,如水的人生,施博,酸菜鱼,永远的阿哲
JD.com购买>> 当当购买>>
本书配套资源和试读ebook>>
本书2023-2024年新修订版尚未发行,敬请期待☺️
本书已于2023年底进行了全面修订:
- 全面提升了可读性:
a)使用了更清晰的代码字体。
b)进行了大量细节修订,以前一些不是特别清楚或者容易产生歧义的地方,都进行了澄清。
c)新增多处“译注”。 - 新的中文版反映了到目前为止所有读者(包括英文版读者)反馈的勘误。
- 标注了一些不适合.NET Core的内容(数量极少)。
- 更新了书中引用的URL,有的进行了缩短(短网址)
- 修订了正文中对部分章节标题的引用
- 增补了术语表
- 现在,绝大多数屏幕截图基于Windows 10/11和Visual Studio 2022
注意,原书虽然基于Visual Studio 2012/2013,.NET Framework 4.5.x和C# 5.0,但在目前最新的Visual Studio 2022(.NET Framework 4.8.x和C# 10 )上,除了关于AppDomain的部分内容,本书绝大多数内容都适合当前的情况。毕竟,整本书讲的都是基础。所有“语法糖”在ILDasm.exe的面前,都是一样的。
关于配套代码,原书配套代码因为涉及到当前不支持一些技术(主要是AppDomain的一些内容),所以在Visual Studio 2022中无法正常打开。为了获得完整体验,你需要下载Visual Studio 2012/2013来打开原版.sln文件。但是,在VS 2022或更高版本中,完全可以自建解决方案,并复制原书配套文件中的.cs文件来进行试验。
关于阅读方式和顺序,请参考知乎文章:https://www.zhihu.com/question/27283360。感谢赵劼。
更新历史:
2014.6.16 提交编辑和审阅(预计1个半月)
2014.6.23 更新和新增了试读章节
2014.11.15 本书上市
2023.10.15 应清华大学出版社要求,进行了全面修订,并重新上市。与此同时,更新了原版的勘误表。
序言
大家好,我们又见面了。谁预见到了今天啊?哈哈,我就预见到了!一旦步入婚姻的殿堂,就相当于进了“土拨鼠日”。如果还没有看过那部电影,就去看看吧。看了之后,就会明白为什么自己老是犯同样的错误。当Jeff说他不再写书的时候,我就知道这是一个上瘾之人开的空头支票。Jeff不可能停止写书。就在今天,我们还在说起他“绝对”不可能写的另一本书呢(实际情况是,有一章已经在写了)。写书已深入到他骨子里面去了。千里马生来就是要奔跑的,Jeff生来就是要写作的。
Jeff太有规律了。他就是离不开硬盘里的那些小小的0和1。忽视它们是不可能的。凌晨3点,我们睡梦正酣的时候,Jeff的生物钟就在催促他起床了(巧合的是,我们4岁大的儿子也恰好在这个时候爬到我们的床上。两爷子的行为模式我都理解不了啊)。一股神秘的力量促使Jeff的大脑自动释放出解决方案、头脑风暴和臭虫之类的东西,迫使他跑到办公室把这些东西从脑袋里倒腾出来。而我们呢,则安心地翻个身继续呼呼大睡,知道Jeff会解决那些问题——就像一个神秘的网络超级英雄,防止线程又成为薄弱环节[1]。
但积累这些知识供自己使用,这对Jeff来说远远不够。好东西不该独享。所以必须把它们传播开来,必须把它们写下来。知识就像电波,有心人能接收得到。这就是他为你所做的,亲爱的读者,是他对Microsoft技术热爱的一份明证。
本书还有另一层意义在里面。Jeff每次绕着太阳“公转”一圈,都会变得更老一些。经过多年的积累,他也学着“向后看”了。由于看事情的方式变得更成熟,他重写了讲反射的那一章。或许你也应该跟他一起回顾一下这个主题。可以学到怎样让代码自个儿询问关于代码的事儿,进而更深入地思考为什么反射要那样工作。穿上便服,找一把舒服的皮椅子坐下,花些时间想想自己的代码,以及它们生命中更深层次的意义。
本书还讲了一样有趣的东西,那就是异步/等待[2]。和我老公以前鼓捣过一阵子的AsyncEnumerator相比,这个东西显然进步了不少。哎,我还以为今后离不开它了呢!事实上,虽然他跟我讲了好多次AsyncEnumerator,但这个东西根本就没有在我的脑子里“阻塞”嘛。于是我偷偷地想,如果知道了什么是enumerator的话,也许就能明白他讲的是啥了。于是我查了一下维基百科,发现enumerator是人口普查员的意思。这一章难道是讲人口普查员怎样协调工作的事儿?那就太浪费纳税人的钱了吧!不过,我相信它在计算机里面的意义比我查到的好。Jeff和微软的团队一起工作,将异步/等待打磨得很完美。你现在通过这本书就能舒舒服服地享受到他们的成果了。我建议你好好读一下。嗯,要顺着读。[3]
本书的另一个重头戏是我感觉最兴奋的。希望你们都来看看关于WinRT的内容。这个术语太书呆子气了,我的理解就是“马上为我无敌帅气的平板搞一些很酷的应用出来!”。你猜得没错,新的Windows Runtime就是围绕无敌帅气的触摸屏展开的。孩子喜欢小鸟飞向小猪,我则喜欢跟鲜花有关的东西,而你完全可以用平板做其他事情。没有做不到,只有想不到!去搞 一些“奇思妙想非常牛掰”(Wonderful Innovative Nifty Really Touchy,WinRT)的东西出来吧。就当是为了我,好好看看这一章吧。否则的话,我对Jeff和他无休止的写作事业可能真会失去耐心了,会把他关到一间只有针头线脑[4],没有电的小黑屋里面。你们程序员看着办吧,是用WinRT写一些很酷的应用,还是再也没有Jeff的新书看!
总之,在你们的力挺之下,Jeff的又一部大作诞生了。我们的家庭貌似又可以回归正常状态了。但真的正常吗?或许他不停写书才是真的正常吧。
让我们耐心等待下一本书的神秘召唤。
Kristin Trace(Jeffrey的妻子)
2012年10月
[1] saving the thread from becoming just another loose end,直译就是“防止线头儿又松了”。——译注
[2] async和await是C#的两个关键字,允许用顺序编程模型执行异步操作。——译注
[3] Kristin用“sequentially”一词吐槽顺序编程模型。——译注
[4] Kristin又在吐槽“thread”了。——译注
——2014,北京
P617页中部,“可调用CancellationTokenSource的Register方法……”,应为“CancellationToken的Register方法”,网上的英版也有问题
虽然此书翻译时间过去很久,但是我现在才开始学习CLR.遇到些问题,烦请指教
location: P60
原文:第一次用-p开关创建只含有公钥的文件(MyCompany.Publickey)
关于-p,这样以下解释或许更加详细些:
-p []
从 中的密钥对提取公钥并导出到
嵌入指定的哈希算法(sha1|sha256|sha384|sha512)。