一个类(或者一个结构)封装了一些相关的属性和方法。在使用这些属性和方法的时候,设计指导要求从不会得到NullReferenceException。这至少包含两个方面的意思:
- 代码中决不要显性地 throw new NullReferenceException
- 代码中要有充分的错误检查,避免由CLR抛出NullReferenceException.
如果某个函数的一个参数不能为null,函数代码需要检查输入是否合法。如果输入是null,代码需要抛出的是ArgumentNullException。
即便是来自微软.NET框架库中的代码也未能100%遵守设计指导,将如下一篇Blog所示。
先前相关:微软将发布.NET框架库的大量源代码
在上次Blog的评论中,有人称赞道:确实,调试方便了不是一点点;这真是太cool了;很好,期待很久了!不过也有这样的评论:买一张MSDN就可以了。实际上,MSDN中并没有包含将发布的.NET Framework的源代码。
这项服务还在最后的调试阶段,很快就会对外发布。我在这个周末通过Visual Studio 2008使用了这一服务。对于.NET程序员来说,这真的是非常有助于调试,也提供了软件开发时候很有价值的参考。
为了在Visual Studio 2008中使用此服务,有以下几个要点:
- 在Debugging | General 选项中,不要选Enable Just My Code (Managed Only).
- 在Debugging | General 选项中,选择Enable source server support.
- 在Debugging | Symbols 选项中,添加Microsoft Reference源代码服务的URL。 正式的URL很快会对外发布。
首次使用时需要接受2个License:一个是symbol,另外一个是Source.
这样在调试程序的时候就可以看到.NET Framework的源代码,也可以在调试时跟进(Step into)。
比如说WinForm的Button.cs就被下载到\src\source\.net\8.0\DEVDIV\depot\DevDiv\releases\whidbey\REDBITS\ndp\fx\src\WinForms\Managed\System\WinForms\Button.cs\1\Button.cs。从文件夹的结构可以看到,.NET框架3.5下的WinForm代码实质上还是Whidbey即.NET 2.0。但的确有了一些更新。REDBITS下是.NET 3.5发布时候的代码。
即使将Winform的项目的Target Framework改成2.0或者3.0,我们一样得到上述的Button.cs. 这是因为REDBITS在安装时取代了早先2.0的程序集。
在WPF下的Button.cs被下载到\src\source\.net\8.0\WIN_WINDOWS\lh_tools_devdiv_wpf\Windows\wcp\Framework\System\Windows\Controls\Button.cs\1\Button.cs。虽然现在WPF属于DevDiv的一部分了,从这个文件夹的结构可以看到以前WPF是隶属于Windows的。
在代码的格式上,您也一定能够看出DevDiv和Windows的区别。
除了在文件中添加了几行版权声明:
// File provided for Reference Use Only by Microsoft Corporation (c) 2007.
// Copyright (c) Microsoft Corporation. All rights reserved.
您看到的代码与微软内部能够看到的代码是完全相同的。那些代码中的注释,还有对private或者internal members的说明,都是在此之前无法从MSDN的文档中得到的信息。
当然没有任何代码是十全十美的。我已经注意到标有HACK HACK HACK注释的代码了。
阅读代码对程序员而言是一件有趣的活动。随着Microsoft Reference源代码服务的推出,我们有更多的阅读材料了!
随着版权意识的增加,许多网站首页(比如此博客堂)都有版权声明,常见的写法举例如下:
Copyright(c) 1999-2008 All Rights Reserved
Copyright(c) 2008 版权所有
例子中使用了2008的年份,因为国内现在已经是元月一日。重视细节的网站应该已经自动或者手工将其版权声明的年份更新了。是不是这样呢?
搜狐和新浪网更新了,而网易没有。
携程网更新了,而ELong(艺龙)没有。
大众点评网更新了,而美食中国网没有。
博客园更新了,而此博客堂则远远没有。
细微之处,往往可以以小见大。
------
Copyright(c) 2008 版权所有