博文

C# 语言规范--2.5 预处理指令(2006-09-04 10:09:00)

摘要:预处理指令提供按条件跳过源文件中的节、报告错误和警告条件,以及描绘源代码的不同区域的能力。使用术语“预处理指令”只是为了与 C 和 C++ 编程语言保持一致。在 C# 中没有单独的预处理步骤;预处理指令按词法分析阶段的一部分处理。 pp-directive:(pp 指令:) pp-declaration(pp 声明)
pp-conditional(pp 条件)
pp-line(pp 行)
pp-diagnostic(pp 诊断)
pp-region(pp 区域) 下面是可用的预处理指令: #define 和 #undef,分别用于定义和取消定义条件编译符号(第 2.5.3 节)。 #if、#elif、#else 和 #endif,用于按条件跳过源代码中的节(第 2.5.4 节)。 #line,用于控制行号(在发布错误和警告信息时使用)(第 2.5.7 节)。 #error 和 #warning,分别用于发出错误和警告(第 2.5.5 节)。 #region 和 #endregion,用于显式标记源代码中的节(第 2.5.6 节)。 预处理指令总是占用源代码中的单独一行,并且总是以 # 字符和预处理指令名称开头。# 字符的前面以及 # 字符与指令名称之间可以出现空白符。 包含 #define、#undef、#if、#elif、#else、#endif 或 #line 指令的源代码行可以用单行注释结束。在包含预处理指令的源行上不允许使用带分隔符的注释(/* */ 样式的注释)。 预处理指令既不是标记,也不是 C# 句法文法的组成部分。但是,可以用预处理指令包含或排除标记序列,并且可以以这种方式影响 C# 程序的含义。例如,编译后,程序:#define A #undef B class C { #if A void F() {} #else void G() {} #endif #if B void H() {} #else void I() {} #endif } 产生与下面的程序完全相同的标记序列:class C { void F() {} void I() {} } 因此,尽管上述两个程序在词法分析中完全不同,但它们在句......

阅读全文(1851) | 评论:0

C# 语言规范--2.4.5 运算符和标点符号(2006-09-04 10:08:00)

摘要:有若干种运算符和标点符号。运算符在表达式中用于描述涉及一个或多个操作数的运算。例如,表达式 a + b 使用 + 运算符添加两个操作数 a 和 b。标点符号用于分组和分隔。 operator-or-punctuator(运算符或标点符号):下列之一 {      }      [      ]      (      )      .      ,      :      ; +      -      *      /      %      &      |       ^      !      ~ =      <      >      ?      ++     ......

阅读全文(1902) | 评论:0

C# 语言规范--2.4.4.6 空文本(2006-09-04 10:07:00)

摘要: null-literal:(空文本:) null “空文本”的类型为 null 类型。  ......

阅读全文(1659) | 评论:0

C# 语言规范--2.4.4.5 字符串(2006-09-04 10:07:00)

摘要:C# 支持两种形式的字符串:规则字符串和逐字字符串。 规则字符串由包含在双引号中的零个或多个字符组成(如 "hello"),并且可以包含简单转义序列(如表示制表符的 \t)、十六进制转义序列和 Unicode 转义序列。 逐字字符串由 @ 字符后跟开始的双引号字符、零个或多个字符以及结束的双引号字符组成。一个简单的示例就是 @"hello"。在逐字字符串中,分隔符之间的字符逐字解释,唯一的例外是“引号转义序列”。具体说来,在逐字字符串中不处理简单转义序列以及十六进制和 Unicode 转义序列。逐字字符串可以跨多行。 string-literal:(字符串:) regular-string-literal(规则字符串)
verbatim-string-literal(逐字的字符串) regular-string-literal:(规则字符串:) "   regular-string-literal-charactersopt   "("   规则字符串字符可选   ") regular-string-literal-characters:(规则字符串字符:) regular-string-literal-character(规则字符串字符)
regular-string-literal-characters   regular-string-literal-character(规则字符串字符   规则字符串字符) regular-string-literal-character:(规则字符串字符:) single-regular-string-literal-character(单个规则字符串字符)
simple-escape-sequence(简单转义序列)
hexadecimal-escape-sequence(十六进制转义序列)
unicode-escape-sequence(unicode 转义序列) single-regular-string-literal-character:(单个规则字符串字符:) ......

阅读全文(1757) | 评论:0

C# 语言规范--2.4.4.4 字符(2006-09-04 10:06:00)

摘要:字符表示单个字符,通常由置于引号中的一个字符组成,如 'a'。 character-literal:(字符:) '   character   '('   字符   ') character:(字符:) single-character(单字符)
simple-escape-sequence(简单转义序列)
hexadecimal-escape-sequence(十六进制转义序列)
unicode-escape-sequence(unicode 转义序列) single-character:(单字符:) 除 ' (U+0027)、\ (U+005C) 和换行符外的任何字符 simple-escape-sequence: one of(简单转义序列:下列之一) \' \" \\ \0 \a \b \f \n \r \t \v hexadecimal-escape-sequence:(十六进制转义序列:) \x   hex-digit   hex-digitopt   hex-digitopt   hex-digitopt(\x   十六进制数字   十六进制数字可选   十六进制数字可选   十六进制数字可选) “字符”中跟在反斜杠字符 (\) 后面的字符必须是下列字符之一:'、"、\、0、a、b、f、n、r、t、u、U、x、v。否则将发生编译时错误。 十六进制转义序列表示单个 Unicode 字符,它的值由“\x”后接十六进制数组成。 如果一个字符表示的值大于 U+FFFF,则将发生编译时错误。 字符中的 Unicode 字符转义序列(第 2.4.1 节)必须在 U+0000 到 U+FFFF 的范围内。 一个简单转义序列表示一个 Unicode 字符编码,详见下表。 转义序列 字符名称 Unicode 编码 \......

阅读全文(1854) | 评论:0

C# 语言规范--2.4.4.3 实数(2006-09-04 10:05:00)

摘要:实数用于编写类型 float、double 和 decimal 的值。 real-literal:(实数:) decimal-digits   .   decimal-digits   exponent-partopt   real-type-suffixopt(十进制数字   .   十进制数字   指数部分可选   实数类型后缀可选)
.   decimal-digits   exponent-partopt   real-type-suffixopt(.   十进制数字   指数部分可选   实数类型后缀可选)
decimal-digits   exponent-part   real-type-suffixopt(十进制数字   指数部分   实数类型后缀可选)
decimal-digits   real-type-suffix(十进制数字   实数类型后缀) exponent-part:(指数部分:) e   signopt   decimal-digits(e   符号可选   十进制数字)
E   signopt   decimal-digits(E   符号可选   十进制数字) sign: one of(符号:下列之一) + - real-type-suffix: on......

阅读全文(1873) | 评论:0

C# 语言规范--2.4.4.2 整数(2006-09-03 18:37:00)

摘要:整数用于编写类型 int、uint、long 和 ulong 的值。整数具有两种可能的形式:十进制和十六进制。 integer-literal:(整数:) decimal-integer-literal(十进制整数)
hexadecimal-integer-literal(十六进制整数) decimal-integer-literal:(十进制整数:) decimal-digits   integer-type-suffixopt(十进制数字   整数类型后缀可选) decimal-digits:(十进制数字:) decimal-digit(十进制数字)
decimal-digits   decimal-digit(十进制数字   十进制数字) decimal-digit: one of(十进制数字:下列之一) 0 1 2 3 4 5 6 7 8 9 integer-type-suffix: one of(整数类型后缀:下列之一) U u L l UL Ul uL ul LU Lu lU lu hexadecimal-integer-literal:(十六进制整数:) 0x   hex-digits   integer-type-suffixopt(0x   十六进制数字   整型后缀可选)
0X   hex-digits   integer-type-suffixopt(0X   十六进制数字   整型后缀可选) hex-digits:(十六进制数字:) hex-digit(十六进制数字)
hex-digits   hex-digit(十六进制数字   十六进制数字) hex-digit: one of(十六进制数字:下列之一) 0 1 2 3 4 5 6 7 ......

阅读全文(1838) | 评论:0

C# 语言规范--2.4.4.1 布尔值(2006-09-03 18:37:00)

摘要:有两种布尔值:true 和 false。 boolean-literal:(布尔值:) true
false 布尔值的类型为 bool。  ......

阅读全文(1852) | 评论:0

C# 语言规范--2.4.4 文本(2006-09-03 18:36:00)

摘要:文本是值的源代码表示形式。 literal:(文本:) boolean-literal(布尔值)
integer-literal(整数)
real-literal(实数)
character-literal(字符)
string-literal(字符串)
null-literal(空值)  ......

阅读全文(1864) | 评论:0

C# 语言规范--2.4.3 关键字(2006-09-03 18:36:00)

摘要:关键字是类似标识符的保留的字符序列,不能用作标识符(以 @ 字符开头时除外)。 keyword: one of(关键字:下列之一) abstract as base bool break byte case catch char checked class const continue decimal default delegate do double else enum event explicit extern false finally fixed float for foreach goto if implicit in int interface internal is lock long namespace new null object operator out override params private protected public readonly ref return sbyte sealed short sizeof stackalloc static string struct switch this throw true try typeof uint ulong unchecked unsafe ushort using virtual void volatile while 在文法中的某些位置,特定的标识符有特殊的含义,但不是关键字。例如,在属性声明中,“get”和“set”标识符有特殊的含义(第 10.6.2 节)。在这些位置决不允许使用 get 或 set 以外的标识符,因此这种用法不会与将这些字用作标识符冲突。  ......

阅读全文(1887) | 评论:0