C# 语言规范--2.4.4.5 字符串(转)
C# 支持两种形式的字符串:规则字符串和逐字字符串。规则字符串由包含在双引号中的零个或多个字符组成(如 "hello"),并且可以包含简单转义序列(如表示制表符的 )、十六进制转义序列和 Unicode 转义序列。逐字字符串由 @ 字符后跟开始的双引号字符、零个或多个字符以及结束的双引号字符组成。一个简单的示例就是 @"hello"。在逐字字符串中,分隔符之间的字符逐字解释,唯一的例外是“引号转义序列”。具体说来,在逐字字符串中不处理简单转义序列以及十六进制和 Unicode 转义序列。逐字字符串可以跨多行。 string
C# 语言规范--2.4.4.3 实数(转)
实数用于编写类型 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:(
C# 语言规范--2.4.4.2 整数(转)
整数用于编写类型 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 inte
C# 语言规范--2.4.4.1 布尔值(转)
有两种布尔值:true 和 false。 boolean-literal:(布尔值:) truefalse布尔值的类型为 bool。[@more@]
C# 语言规范--2.4.3 关键字(转)
关键字是类似标识符的保留的字符序列,不能用作标识符(以 @ 字符开头时除外)。 keyword: one of(关键字:下列之一) 在文法中的某些位置,特定的标识符有特殊的含义,但不是关键字。例如,在属性声明中,“get”和“set”标识符有特殊的含义(第 10.6.2 节)。在这些位置决不允许使用 get 或 set 以外的标识符,因此这种用法不会与将这些字用作标识符冲突。[@more@]
C# 语言规范--2.4.4 文本(转)
文本是值的源代码表示形式。 literal:(文本:) boolean-literal(布尔值)integer-literal(整数)real-literal(实数)character-literal(字符)string-literal(字符串)null-literal(空值)[@more@]
C# 语言规范--2.4.2 标识符(转)
本节给出的标识符规则完全符合 Unicode 标准附件 15 推荐的规则,但以下情况除外:允许将下划线用作初始字符(这是 C 编程语言的传统),允许在标识符中使用 Unicode 转义序列,以及允许“@”字符作为前缀以使关键字能够用作标识符。 identifier:(标识符:) available-identifier(可用的标识符)@ identifier-or-keyword(@ 标识符或关键字) available-identifier:(可用的标识符:) 不是“关键字”的“标识符或关键字” identifier-or-keyword:(标识符或关键字:) identifier-start-character identifier-part-charactersop
C# 语言规范--2.4 标记(转)
有若干种标记:标识符、关键字、文本、运算符和标点符号。空白和注释不是标记,但它们可充当标记的分隔符。 token:(标记:) identifier(标识符)keyword(关键字)integer-literal(整数)real-literal(实数)character-literal(字符)string-literal(字符串)operator-or-punctuator(运算符或标点)[@more@]
C# 语言规范--2.4.1 Unicode 字符转义序列(转)
Unicode 字符转义序列表示一个 Unicode 字符。Unicode 字符转义序列在标识符(第 2.4.2 节)、字符(第 2.4.4.4 节)和规则字符串(第 2.4.4.5 节)中处理。不在其他任何位置处理 Unicode 字符转义(例如,在构成运算符、标点符号或关键字时)。 unicode-escape-sequence:(unicode 转义序列:) u hex-digit hex-digit hex-digit hex-digit(u 十六进制数字 十六进制数字 十六进制数字 十六进制数字)U hex-digit hex-digit hex-digit hex-digit hex-digit hex-digit hex-digit hex-digit(U 十六进制
C# 语言规范--2.3.3 注释(转)
支持两种形式的注释:单行注释和带分隔符的注释。单行注释以字符 // 开头并延续到源行的结尾。带分隔符的注释以字符 /* 开头,以字符 */ 结束。带分隔符的注释可以跨多行。 comment:(注释:) single-line-comment(单行注释)delimited-comment(带分隔符的注释) single-line-comment:(单行注释:) // input-charactersopt(// 输入字符可选) input-characters:(输入字符:) input-character(输入字符)input-characters input-character(输入字符 输入字符) input-character:(输入字符:) 除换行符外的任何 Unicode
C# 语言规范--2.3.1 行结束符(转)
行结束符将 C# 源文件的字符划分为行。 new-line:(新行:) 回车符 (U+000D)换行符 (U+000A)回车符 (U+000D) 后跟换行符 (U+000A)行分隔符 (U+2028)段落分隔符 (U+2029)为了与添加文件尾标记的源代码编辑工具兼容,并能够以正确结束的行序列的形式查看源文件,下列转换按顺序应用到 C# 程序中的每个源文件: 如果源文件的最后一个字符为 Control-Z 字符 (U+001A),则删除此字符。 如果源文件非空并且源文件的最后一个字符不是回车符 (U+000D)、换行符 (U+000A)、行分隔符 (U+2028) 或段落分隔符 (U+2029),则将在源文件的结尾添加一个回车
C# 语言规范--2.3.2 空白(转)
空白被定义为任何含 Unicode 类 Zs 的字符(包括空白字符)以及水平制表符、垂直制表符和换页符。 whitespace:(空白:)任何含 Unicode 类 Zs 的字符水平制表符 (U+0009) 垂直制表符 (U+000B) 换页符 (U+000C)[@more@]
C# 语言规范--2.2.2 词法文法(转)
第 2.3 节、第 2.4 节和第 2.5 节介绍 C# 的词法文法。词法文法的结束符号为 Unicode 字符集的字符,并且词法文法指定如何组合字符以构成标记(第 2.4 节)、空白(第 2.3.2 节)、注释(第 2.3.3 节)和预处理指令(第 2.5 节)。C# 程序中的每个源文件都必须符合词法文法的输入产生式(第 2.3 节)。[@more@]C# 语言规范--2.2.2 词法文法
C# 语言规范--2.2.3 句法文法(转)
本章后面的章节和附录介绍 C# 的句法文法。句法文法的结束符号是由词法文法定义的标记,句法文法指定如何组合这些标记以构成 C# 程序。C# 程序中的每个源文件都必须符合句法文法的编译单元产生式(第 9.1 节)。[@more@]
C# 语言规范--2.1 程序(转)
C# 程序由一个或多个源文件(正规地应称为编译单元(第 9.1 节))组成。源文件是有序的 Unicode 字符序列。源文件与文件系统中的文件通常具有一对一的对应关系,但这种对应关系不是必需的。为实现最大的可移植性,建议这些文件在文件系统中应按 UTF-8 规范编码。从概念上讲,程序的编译分三个步骤: 转换,这一步将用特定字符指令系统和编码方案编写的文件转换为 Unicode 字符序列。 词法分析,这一步将 Unicode 输入字符流转换为标记流。 句法分析,这一步将标记流转换为可执行代码。[@more@]
C# 语言规范--2.2.1 文法表示法(转)
词法文法和句法文法用文法产生式来表示。每个文法产生式定义一个非结束符号和它可能的扩展(由非结束符或结束符组成的序列)。在文法产生式中,非结束符号显示为斜体,而结束符号显示为等宽字体。文法产生式的第一行是该产生式所定义的非结束符号的名称,后跟一个冒号。每个后续的缩进行列出一个可能的扩展,它是以非结束符或结束符组成的序列的形式给出的。例如,产生式: while-statement:(while 语句:) while ( boolean-expression ) embedded-statement(while ( 布尔表达式 ) 嵌入语句)定义了一个 while 语句,它
C# 语言规范--1.14 属性(转)
C# 是一种命令式语言,但像所有命令式语言一样,它具有某些声明性元素。例如,通过将类中的方法声明为 public、protected、internal、protected internal 或 private,指定它的可访问性。C# 使此功能一般化,以便程序员可以创造出一种新的声明性信息,将此声明性信息附加到各种程序实体,并在运行时检索此声明性信息。程序通过定义和使用属性(第 17 节)来描述这类额外的声明性信息。例如,一个框架也许会定义一个可放置在程序元素(如类和方法)上的 HelpAttribute 属性,使开发人员能够提供从程序元素到其文档的映射。示例using System
C# 语言规范--1.13 版本控制(转)
版本控制是一个过程,它以兼容的方式对组件进行不断的改进。如果依赖于早期版本的代码重新编译后可以适用于新版本,则组件的新版本与早期版本源代码兼容。相反,如果依赖于早期版本的应用程序不用重新编译即可适用于新版本,则组件的新版本为二进制兼容。大多数语言根本不支持二进制兼容性,而且许多语言对促进源代码兼容性所做甚少。实际上,某些语言所含的缺陷使得用它开发出来的组件在不断的改进过程中,一般至少会使依赖于该组件的某些客户端代码失效。例如,请看一个发布名为 Base 的类的基类作者的情况。在第一个版本中,Base 不包含
C# 语言规范--1.11 枚举(转)
枚举类型声明为一组相关的符号常数定义了一个类型名称。枚举用于“多项选择”场合,就是程序运行时从编译时已经设定的固定数目的“选择”中做出决定。示例enum Color { Red, Blue, Green}class Shape{ public void Fill(Color color) { switch(color) { case Color.Red: ... break; case Color.Blue: ... break; case Color.Green: ... break; default: break; } }}显示了一个 Color 枚举和一个使用此
C# 语言规范--1.12 命名空间和程序集(转)
除了依赖于几个系统提供的类(如 System.Console),到目前为止介绍的程序都是独立存在的。但更常见的情况是:实际的应用程序由若干不同的部分组成,每个部分分别进行编译。例如,企业级应用程序可能依赖于若干不同的组件,其中包括某些内部开发的组件和某些从独立软件供应商处购买的组件。命名空间和程序集有助于开发基于组件的系统。命名空间提供一个逻辑组织体系。命名空间既用作程序的“内部”组织体系,也用作“外部”组织体系(一种表示向其他程序公开程序元素的途径)。程序集用于物理打包和部署。程序集可以包含类型、用于实现这些