3.1 C#的基本语法
C#代码的外观和操作方式与C++和Java非常类似。初看起来,其语法可能比较混乱,不像某些语言那样与书面英语十分接近。但实际上,在C#编程中,使用这种风格是很合理的,而且不用花太多力气就可以编写出便于阅读的代码。
与其他语言(如Python)的编译器不同,C#编译器不考虑代码中的空格、回车符或制表符(这些字符统称为空白字符)。这样格式化代码时就有很大的自由度,但遵循某些规则将有助于提高代码的可读性。
C#代码由一系列语句组成,每条语句都用一个分号结束。因为空白被忽略,所以一行可以有多条语句,但从可读性的角度看,通常在分号的后面加上回车符,不在一行中放置多条语句。但一条语句放在多行是可以的(也比较常见)。
C#是一种块结构的语言,所有语句都是代码块的一部分。这些块用花括号来界定(“{”和“}”),代码块可以包含任意多行语句,或者根本不包含语句。注意花括号字符不需要附带分号。
例如,简单的C#代码块如下所示:
{ <code line 1, statement 1>; <code line 2, statement 2> <code line 3, statement 2>; }
其中<code line x, statement y>部分并非真正的C#代码,而是用这个文本作为C#语句的占位符。在这段代码中,第2、第3行代码是同一条语句的一部分,因为在第2行的末尾没有分号。缩进第3行代码,就更容易确定这是第二行代码的继续。
下面的简单示例还使用了缩进格式,提高了C#代码的可读性。这是标准做法,实际上在默认情况下VS会自动缩进代码。一般情况下,每个代码块都有自己的缩进级别,即它向右缩进了多少。代码块可以互相嵌套(即块中可以包含其他块),而被嵌套的块要缩进得多一些。
{ <code line 1>; { <code line 2>; <code line 3>; } <code line 4>; }
前面代码行的续行通常也要缩进得多一些,如上面第一个示例中的第3行代码所示。
注意:在能通过Tools | Options访问的VS Options对话框中,显示了VS用于格式化代码的规则。在Text Editor | C# | Formatting节点的子类别下,包含了其中很多规则。此处的大多数设置都反映了还没有讲述的C#部分,但如果以后要修改设置,以更适合自己的个性化样式,就可以回过头来看看这些设置。在本书中,为简洁起见,所有代码段都使用默认设置来格式化。
当然,这种样式并不是强制的。但如果不使用它,读者在阅读本书时会很快陷入迷茫之中。
在C#代码中,另一种常见的语句是注释。注释并非严格意义上的C#代码,但代码最好有注释。注释的作用不言自明:给代码添加描述性文本(用英语、法语、德语、外蒙古语等),编译器会忽略这些内容。在开始处理冗长的代码段时,注释可用于为正在进行的工作添加提示,例如“这行代码要求用户输入一个数字”,或“这段代码由Bob编写”。
C#添加注释的方式有两种。可以在注释的开头和结尾放置标记,也可以使用一个标记,其含义是“这行代码的其余部分是注释”。在C#编译器忽略回车符的规则中,后者是一个例外,但这是一种特殊情况。
要使用第一种方式标记注释,可在注释开头加上/*字符,在末尾加上*/字符。这些注释符号可以在单独一行上,也可以在不同的行上,注释符号之间的所有内容都是注释。注释中唯一不能输入的是*/,因为它会被看成注释结束标记。所以下面的语句是正确的:
/* This is a comment */ /* And so. . . . . . is this! */
但以下语句会产生错误:
/* Comments often end with "*/" characters */
注释结束符号后的内容("*/"后面的字符)会被当作C#代码,因此产生错误。
另一种添加注释的方式是用//开始一个注释,在其后可以编写任何内容,只要这些内容在一行上即可。下面的语句是正确的:
// This is a different sort of comment.
但下面的语句会失败,因为第二行代码会被解释为C#代码:
// So is this, but this bit isn't.
这类注释可用于语句的说明,因为它们都放在一行上:
<A statement>; // Explanation of statement
前面讲过,有两种给C#代码添加注释的方式。但在C#中,还有第三类注释,严格地说,这是//语法的扩展。它们都是单行注释,用三个/符号来开头,而不是两个。
/// A special comment
正常情况下,编译器会忽略它们,就像其他注释一样,但可以通过配置VS,在编译项目时,提取这些注释后面的文本,创建一个特殊格式的文本文件,该文件可用于创建文档。为了创建文档,注释必须遵循XML文档的规则,详见https://msdn.microsoft.com/library/aa288481.aspx。本书不讨论这个主题,但这是很值得探讨的内容,如果读者有时间,建议学习掌握。
特别要注意的一点是,C#代码是区分大小写的。与其他语言不同,必须使用正确的大小写形式输入代码,因为简单地用大写字母代替小写字母会中断项目的编译。看看下面这行代码,它曾在第2章中使用:
Console.WriteLine("The first app in Beginning C# Programming! ");
C#编译器能理解这行代码,因为Console.WriteLine()命令的大小写形式是正确的。但是,下面的语句都不能工作:
console.WriteLine("The first app in Beginning C# Programming! "); CONSOLE.WRITELINE("The first app in Beginning C# Programming! "); Console.Writeline("The first app in Beginning C# Programming! ");
这里使用的大小写形式是错误的,所以C#编译器不知道我们要做什么。幸好,VS在代码的键入方面提供了许多帮助,在大多数情况下,它都知道我们要做什么。在键入代码的过程中,VS会推荐用户可能要使用的命令,并尽可能纠正大小写问题。