与 C++ 一样, C# 程序也采用区分大小写的自由书写格式,编译器会忽略多余的白空符; C# 也支持“ \a ”、“ \n ”和“ \t ”等转移字符; C# 的每个语句也都以分号“ ; ”结束;语句块也用花括号对“ { ”和“ } ”来界定。参见下表:(红色为 C# 特有的)
C# 的符号与标记
说明 <?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /> | 符号与标记 |
空白 | 空格 SP |
制表符 | 水平制表符 HT ( Tab )或垂直制表符 VT |
标点 | . , : ; |
行结束符 | 回车 CR |
注释 | // 、 /* 、 */ 、 /// 、 /** |
预处理指令 | # |
块 | {} |
泛型 | <>
|
可空类型 | ? |
字符 | Unicode 字符 |
转移字符 | \ 代码 |
逐字符 | @ " …… " 、 @ 标识符 |
数值后缀 | d D 、 f F 、 l L 、 lu LU 、 m M 、 u U 、 ul UL |
运算符 | + 、 - 、 * 、 / 、 % 、 ++ 、 -- 、 < 、 == 、 > 、 ?: 、 ?? 、 () 、…… |
(1)文档注释符“///……”和“/**……*/”
C# 除了支持 C++ 的单行注释“ // ……”和定界注释“ /* …… */ ”外,还增加了与之对应的如下两种文档注释方式:
l 单行文档注释“ /// ……”——是“ // ……”方式的扩展,增加了一个斜线符“ / ”。
l 定界文档注释:“ /** …… */ ”——是 /* …… */ 方式的扩展,在起端增加了一个星号符“ * ”。
这两种新注释,都用于 C# 项目说明文档的自动提取和生成,说明文档采用的是 XML 格式,由 C# 编译器自动生成。但是需要添加 /doc 编译器选项,或在 Visual Studio 的 IDE 中激活该功能。具体方法是:选“项目”菜单中的“ * 属性”菜单项;在 IDE 中部打开的项目属性页中,选左列的“生成”选项,在右边下部的“输出”栏中,选中“ XML 文档文件”复选框以激活文档自动生成功能,还可以输入或修改“输出路径”和文件名,缺省为项目的“ bin\Debug ”或“ bin\Release ”子目录和“项目名 .XML ”。参见下图:
例如, C# 编译器为不加任何注释的 HelloWorld 项目所生成的说明文档为:
// HelloWorld.XML <? xml version ="1.0" ?> < doc > < assembly > < name >HelloWorld </ name > </ assembly > < members > </ members > </ doc >
如果你在 Program 类的定义前加上一行,在键入“ /// ”后,系统会自动生成下面代码中的灰色部分,然后你自己再添加绿色部分。
/// <summary> /// Start class for simple HelloWorld /// </summary>
则编译器会自动生成如下说明文档:
// HelloWorld.XML <? xml version ="1.0" ?> < doc > < assembly > < name >HelloWorld </ name > </ assembly > < members > < member name ="T:HelloWorld.Program" > < summary > Start class for simple HelloWorld </ summary > </ member > </ members > </ doc >
(2)逐字符@
C# 新引进的逐字符( verbatim character ) @ ,可以避免解析字符串中的转移字符和标识符中的关键字等:
l 逐字字符串 ( verbatim string )—— @" …… " , 不解析其中的转移序列。例如:
string fn = @"C:\Doc\data.txt";
l 逐字标识符( verbatim identifier )—— @ 标识符,不解析标识符,使关键字也可以用作变量名、类名和方法名等普通标识符。例如:
int @ for = 12;
(3)可空类型符?
不能使用的对象,可以用设置其值为空 null 来标识。但是基本值类型是不能赋值为空的,那会导致编译错误。传统的经验解决办法是赋给其一个取值范围之外的值,如“ -1 ”( 0xFFFFFFFF ),但这种方法并不标准。
现在 C# 给出了一种完美的解决方案——可空类型( nullable type ):声明值类型的变量时,在变量名后添加可空类型的问号符“ ? ”,则该变量成为可空类型,可以被赋值为空。
在 C# 中,还可以通过可空类型的共用只读属性 HasValue ,来判断可空类型变量是否为空。例如:
int? x = 123; int? y = null; if (x.HasValue) Console.WriteLine(x.Value); // 输出123 if (y.HasValue) Console.WriteLine(y.Value); // 输出