一 程序的编译、构成
a) 编写C#代码一般用VS,但作者在这儿介绍了使用记事本编写C#代码并编译运行的过程,以便对VS有更深入的认识。
用记事本编写C#代码后,修改文本文件的后缀为.cs,然后用csc.exe(C# Command-Line Complier)来编译。如果编译成功,在命令行输入程序的路径和名称便可以执行了。
b) 用命名空间来为类分组,可以在.cs文件的头部使用Using指令来代指命名空间,后续使用类时,编辑器会从Using指令指定的命名空间中查找是否有对应的类。
还可以在Using指令区域为类创建别名,比如:
c) 程序错误
对程序来说,任何意料之外发生的事都可以认为是错误。程序错误分为两种:编译时错误和运行时错误。前者在编译的时候就会发生,这时编辑器会提示错误信息类似:
错误信息告知了编译时发生的错误详情,并有错误代码,比如图中的cs0234。关于该错误的更详细信息可以在.NET Framework SDK Documentation中根据错误码查找。
对于编译时错误,如果一个文件中有多处错误,编译器只会报第一个错,因为只要遇到错误,编译就会终止。
二 ILDASM
这里作者详细介绍了HelloWold.cs程序使用ILDASM生成的IL码。
Main函数的IL码如下:
程序第一行.method关键字表示方法,另外有public、static修饰符,最后还有managed关键字,与之对应的还有unmanaged、unsafe,这些作者会在后面讲解。
第二行的.entrypoint表示这个方法是这个程序的入口,这在C#中对应Main函数为入口函数。
IL_0000行,ldstr为Load String的简写,将硬编码“Hello, World”装载到内存。
IL_0005行,调用Console.WriteLine函数,后面括号中的(class System.String)指示了参数的类型和个数。
最后一行还有IL_000a: ret,图里面漏掉了,表示返回执行结果。
三 关于命名规范
统一的命名规范有很对好处,比如降低维护成本。本书成书于2002年前后,作者还认为匈牙利命名规范(名称中包含了变量的类型、作用域等信息)不适合面向对象语言,因为在这类语言中类型都继承自基本类型,比如在C#中都继承自System.Object。
推荐组合使用帕斯卡命名法(Pascal Casing)和驼峰命名法(Camel Casing),在类、方法的命名中使用帕斯卡命名法,在变量的命名中使用驼峰命名法。详情如下:
命名空间:帕斯卡,推荐使用公司名称
类:帕斯卡,使用能描述类的职能的名词
方法:帕斯卡,使用描述方法动作的动词
方法参数:帕斯卡,使用有意义的名称
接口:帕斯卡,以大写字母I开头,代表某种行为,推荐使用I***able的形式