作者:empty 页数:517 出版社:empty |
介绍C#(读作“See Sharp”) 是一种简洁、现代、面向对象且类型安全的编程语言。C#起源于C语言家族, 因此, 对于C、C++和Java程序员, 可以很快熟悉这种新的语言。C#已经分别由ECMAInte mational和ISO/TEC组织接受并确立了标准, 它们分别是ECMA-334标准和ISO/IEC 23270标准,Microsoft用于.NET Framework的C#编译器就是根据这两个标准实现的。C#是面向对象的语言, 然而C#进一步提供了对面向组件(component-oriented) 编程的支持。现代软件设计日益依赖于自包含和自描述功能包形式的软件组件。这种组件的关键在于,它们通过属性、方法和事件来提供编程模型:它们具有提供了关于组件的声明性信息的特性;同时,它们还编入了自己的文档。C#提供的语言构造直接支持这些概念,这使得C#语言自然而然成为创建和使用软件组件之选。有助于构造健壮、持久的应用程序的若干C#特性:垃圾回收(Garbage collection) 将自动回收不再使用的对象所占用的内存; 异常处理(exception handling) 提供了结构化和可扩展的错误检测和恢复方法; 类型安全(type-safe) 的语言设计则避免了读取未初始化的变量、数组索引超出边界或执行未经检查的类型强制转换等情形。
C#具有一个同一类型系统(unified type system) .所有C#类型(包括诸如int和double之类的基元类型) 都继承于单个根类型:object.因此, 所有类型都共享一组通用操作, 并且任何类型的值都能够以一致的方式进行存储、传递和操作。此外,C#同时支持用户定义的引用类型和值类型,既允许对象的动态分配,也允许轻量结构的内联存储。为了确保C#程序和库能够以兼容的方式逐步演进, C#的设计中充分强调了版本控制(versioning) .许多编程语言不太重视这一点,导致采用那些语言编写的程序常常因为其所依赖的库的更新而无法正常工作。C#的设计在某些方面直接考虑到版本控制的需要, 其中包括单独使用的virtual和override修饰符、方法重载决策规则以及对显式接成员声明的支持。本章的其余部分将描述C#语言的基本特征。尽管后面的章节会更为详尽,有时甚至逻辑缜密地对规则和例外情况进行描述,但本章的描述力求简洁明了,因而难免会牺牲完整性,这样做是为了向读者提供关于该语言的概貌,一方面使读者能尽快上手编写程序,另一方面为阅读后续章节提供指导.
1.1 Helloworld按照约定俗成的惯例, 我们先从“Hello, World”程序着手介绍这一编程语言。下面是它的C#程序:C#源文件的扩展名通常是.cs.假定“Hello, World”程序存储在文件he1lo.cs中, 可以使用下面的命令行调用Microsoft C#编译器编译这个程序:编译后将生成一个名为he11o.exe的可执行程序集。当此应用程序运行时, 输出结果如下:版权所有O Microsoft Corp arai on 1999.2012。保所有权利C#LANGUAGE SPECIFICATION“Hello, World”程序的开头是一个using指令, 它引用了System命名空间。命名空间提供了一种分层的方式来组织C#程序和库。命名空间中包含有类型及其他命名空间一例如, System命名空间包含若干类型《如此程序中引用的conso1e类) 以及若干其他命名空间(如IO和co11ections) , 如果使用using指令引用了某一给定命名空间, 就可以通过非限定方式使用作为该命名空间成员的类型。正是由于使用了using指令, 该程序才可以采用console.writeLine这一简化形式代替System.console.writeLine a“Hello, World”程序中声明的He11o类只有一个成员, 即名为Main的方法。Main方法是使用static修饰符声明的。实例方法可以使用关键字this来引用特定的封闭对象实例, 而静态方法的操作不需要引用特定对象。按照惯例, 名为Main的静态方法将作为程序的入点。该程序的输出由System命名空间中的console类的writeLine方法产生。此类由.NET Framework类库提供, 默认情况下, Microsoft C#编译器自动引用该类库, 注意, C#语言本身没有单独的运行库。事实上, NET Framework就是C#运行库,
1.2程序结构C#中的组织结构的关键概念是程序(program) 、命名空间(namespace) 、类型(type) 、成员(member) 和程序集(assembly) 。C#程序由一个或多个源文件组成。程序中声明类型, 类型包含成员, 并且可按命名空间进行组织。类和接就是类型的示例。字段(field) 、方法、属性和事件是成员的示例.在编译C#程序时, 它们被物理地打包为程序集, 程序集通常具有文件扩展名.exe或.d 11, 具体取决于它们是实现应用程序(application) 还是实现库(library) 。
目录
1.介绍.
1.1 Helloworld.
1.2程序结构.
1.3类型和变量.
1.4表达式.
1.5语句.
1.6类和对象.
.12
.12
1.6.1成员.
1.6.2可访问性.
1.6.3类型形参.
1.6.4基类.
1.6.5字段.
1.6.6方法.
1.6.6.1参数.
2.2.2词法文法.
2.3.2注释.
2.3.3空白.
2.4.2标识符.
2.4.3关键字.
2.4.4文本.
2.4.4.1布尔值.
2.4.4.2整数.
2.4.4.3实数.
2.4.4.4字符.
2.4.4.5字符串
2.4.4.6null文本.
2.5.3声明指令.
2.5.5诊断指令.
2.5.6区域指令.
2.5.8.1Pragma warning.
3.4.2结构成员.
3.4.4类成员.
3.4.5接成员.
3.4.6数组成员.
3.4.7委托成员.
3.5.1已声明可访问性.
3.5.2可访问域.
3.5.3实例成员的受保护访问.
3.5.4可访问性约束.
3.7.1名称隐藏.
3.7.1.1通过嵌套隐藏.
3.7.1.2通过继承隐藏.
1.6.6.2方法体和局部变量.
1.6.6.3静态方法和实例方法.
1.6.6.4虚方法、重写方法和抽象方法.
1.6.6.5方法重载.
1.6.7其他函数成员.
1.6.7.1构造函数.
1.6.7.2属性.
1.6.7.3索引器.
1.6.7.4事件.
1.6.7.5运算符.
1.6.7.6析构函数.
1.7结构.
1.8数组.
1.9接.
1.10枚举.
1.11委托.
1.12特性.
2.词法结构.
2.1程序.
2.2文法.
2.2.1文法表示法
2.2.3句法文法.
2.3语法分析.
2.3.1行结束符.
2.4标记.
2.4.1 Unicode字符转义序列.
2.4.5运算符和标点符号
2.5预处理指令.
2.5.1条件编译符号
2.5.2预处理表达式
2.5.4条件编译指令
2.5.7行指令.
2.5.8Pragma指令.
3.基本概念.
3.1应用程序启动.
3.2应用程序终止.
3.3声明.
3.4成员.
3.4.1命名空间成员
3.4.3枚举成员.
3.5成员访问.
3.6签名和重载.
3.7范围.
3.8命名空间和类型名称.
3.8.1完全限定名.
3.9自动内存管理.
3.10执行顺序.
4.类型.
4.1值类型.
4.1.1 System.ValueType类型.
4.1.2默认构造函数.
4.1.3结构类型.
4.1.4简单类型.
4.1.5整型.
4.1.6浮点型.
4.1.7 decimal类型.
4.1.8bool类型.
4.1.9枚举类型.
4, 1.10可以为null的类型.
4.2引用类型.
4.2.1类类型.
4.2.2对象类型.
4.2.3 dynamic类型.
4.2.4 string类型.
4.2.5接类型.
4.2.6数组类型.
4.2.7委托类型.
4.3装箱和拆箱.
4.3.1装箱转换.
4.3.2拆箱转换.
4.4构造类型.
4.4.1类型实参.
4.4.2开放和封闭类型.
4.4.3绑定和未绑定类型.
4.4.4满足约束.
4.5类型形参.
4.6表达式树类型.
4.7 dynamic类型.
5.变量.
5.1变量类别.
5.1.1静态变量.
5.1.2实例变量.
5.1.2.1类中的实例变量.
5.1.2.2结构中的实例变量.
5.1.3数组元素.
5.1.4值参数.
5.1.5引用参数.
5.1.6输出形参.
5.1.7局部变量.
5.3.1初始已赋值变量.
5.3.2初始未赋值变量.
5.3.3.1一般语句规则.
6.1.5null文本转换.
6.1.6隐式引用转换.
版权所有OM crosoft Corporat on 1999-2012。保解所有权利,
C#LANGUAGE SPECIFICATION
5.2默认值.
5.3明确赋值.
5.3.3确定明确赋值的细则.
5.4变量引用.
5.3.3.2块语句、checked和unchecked语句.
5.3.3.3表达式语句.
5.3.3.4声明语句.
5.3.3.5if语句.
5.3.3.6 switch语句.
5.3.3.7 while语句.
5.3.3.8do语句.
5.3.3.9 for语句.
5.3.3.10 break、cont nue和goto语句
5.3.3.11 throw语句.
5.3.3.12retum语句.
5.3.3.13try-catch语句.
5.3.3.14try-finally语句.
5.3.3.15try-catch-finally语句.
5.3.3.16 for each语句.
5.3.3.17 using语句.
5.3.3.18lock语句.
5.3.3.19 yield语句.
5.3.3.20简单表达式的一般规则.
5.3.3.21带有嵌入表达式的表达式的一般规则
5.3.3.22调用表达式和对象创建表达式.
5.3.3.23简单赋值表达式.
5.3.3.24&&表达式.
5.3.3.25|表达式.
5.3.3.26!表达式.
5.3.3.27??表达式.
5.3.3.28?:表达式.
5.3.3.29匿名函数.
5.5变量引用的原子性.
6.转换.
6.1隐式转换.
6.1.1标识转换.
6.1.2隐式数值转换.
6.1.3隐式枚举转换.
6.1.4可以为null的隐式转换.
6.1.7装箱转换.
6.1.8隐式动态转换.
6.1.9隐式常量表达式转换.
7.3.3一元运算符重载决策.
7.3.4二元运算符重载决策.
7.3.6数值提升.
7.3.6.1一元数值提升.
7.3.62二元数值提升.
7.3.7提升运算符.
7.4.1基类型.
7.5.1.1对应形参.
7.5.1.2实参列表的运行时计算.
7.5.2类型推断.
7.5.2.1第一阶段.
7.5.2.2第二阶段.
7.5.2.3输入类型.
7.5.2.4输出类型.
7.5.2.5依赖.
7.5.26输出类型推断.
7.5.2.7参数类型显式推断.
7.5.2.8精确推断.
7.5.2.9下限推断.
7.5.2.10上限推断.
7.5.2.11固定.
7.5.2.12推断返回类型.
7.5.2.13方法组转换的类型推断.
7.5.2.14查找一组表达式的最通用类型.
7.5.3重载决策.
7.5.3.1适用函数成员.
7.5.3.2更好的函数成员.
7.5.3.3表达式的更佳转换.
7.5.3.4类型的更佳转换.
7.5.3.5更佳转换目标.
7.5.3.6泛型类中的重载.
7.5.5函数成员调用.
7.5.5.1已装箱实例上的调用.
7.6.1文本.
7.6.2简单名称.
7.6.2.1块中的固定含义.
7.6.3带括号的表达式.
7.6.4成员访问.
7.6.4.1相同的简单名称和类型名称.
7.6.4.2语法多义性.
7.6.5调用表达式.
7.6.5.1方法调用.
6.1.10涉及类型形参的隐式转换.
6.1.11用户定义的隐式转换.
6.1.12匿名函数转换和方法组转换.
6.2显式转换.
6.2.1显式数值转换.
6.2.2显式枚举转换.
6.2.3可以为null的显式转换
6.24显式引用转换.
6.2.5拆箱转换.
6.2.6显式动态转换.
6.2.7涉及类型参数的显式转换.
6.2.8用户定义的显式转换.
6.3标准转换.
6.3.1标准隐式转换.
6.3.2标准显式转换.
6.4用户定义的转换.
6.4.1允许的用户定义转换.
6.4.2提升转换运算符.
6.4.3用户定义转换的计算.
6.4.4用户定义的隐式转换.
6.4.5用户定义的显式转换.
6.5匿名函数转换.
6.5.1匿名函数转换为委托类型的计算.
6.5.2匿名函数转换为表达式树类型的计算.
6.5.3实现示例.
6.6方法组转换.
7.表达式.
7.1表达式的分类.
7.1.1表达式的值.
7.2静态和动态绑定.
7.2.1绑定时间.
7.2.2动态绑定.
72.3构成表达式的类型.
7.3运算符.
7.3.1运算符的优先级和顺序关联性.
7.3.2运算符重载.
7.3.5候选用户定义运算符.
版权所有OMi rosoft Corp a raton 1999-2012。保商所有权利
C#LANGUAGE SPECIFICATION
7.4成员查找.
7.5函数成员.
7.5.1实参列表.
7.5.4动态重载决策的编译时检查.
7.6基本表达式.
7.6.6元素访问.
7.6.6.1数组访问.
7.6.6.2索引器访问.
7.6.7 this访问.
7.6.8基访问.
7.6.9后缀增量和后缀减量运算符.
7.6.10 new运算符.
7.6.10.1对象创建表达式.
7.6.10.2对象初始值设定项.
7.6.10.3集合初始值设定项.
7.6.10.4数组创建表达式.
7.7.7.2await表达式的分类.
7.10.10is运算符.
7.10.11as运算符.
7.11.2枚举逻辑运算符.
7.11.3布尔逻辑运算符.
7.12.1布尔条件逻辑运算符.
7.15.2匿名函数体.
7.15.3重载决策.
7.15.5外层变量.
7.15.5.1捕获的外层变量.
7.15.5.2局部变量实例化.
7.16.2查询表达式转换.
8.2.1语句列表.
7.6.10.5委托创建表达式.
7.6.10.6匿名对象创建表达式.
7.6.11 type of运算符.
7.6.12 checked和unchecked运算符
7.6.13默认值表达式.
7.6.14匿名方法表达式.
7.7一元运算符.
7.7.1一元加运算符.
7.7.2一元减运算符.
7.7.3逻辑否定运算符.
7.7.4按位求补运算符.
7.7.5前缀增量和减量运算符.
7.7.6强制转换表达式.
7.7.7Await表达式.
7.7.7.1可等待的表达式.
7.7.7.3await表达式的运行时计算.
7.8算术运算符.
7.8.1乘法运算符.
7.8.2除法运算符.
7.8.3余数运算符.
7.8.4加法运算符.
7.8.5减法运算符.
7.9移位运算符.
7.10关系和类型测试运算符.
7.10.1整数比较运算符.
7.10.2浮点比较运算符.
7.10.3小数比较运算符.
7.10.4布尔相等运算符.
7.10.5枚举比较运算符.
7.10.6引用类型相等运算符.
7.10.7字符串相等运算符.
7.10.8委托相等运算符.
7.10.9相等运算符和null.
版权所有O Miras of Cura rain 1999.2012.邮所有权利
C#LANGUAGE SPECIFICATION
7.11逻辑运算符.
7.11.1整数逻辑运算符.
7.11.4可以为null的布尔逻辑运算符.
7.12条件逻辑运算符.
7.12.2用户定义的条件逻辑运算符.
7.13空合并运算符.
7.14条件运算符.
7.15匿名函数表达式.
7.15.1匿名函数签名.
7.15.4匿名函数与动态绑定.
7.15.6匿名函数表达式计算.
7.16查询表达式.
7.16.1查询表达式的多义性.
7.16.2.1带继续符的select和group by子句
7.16.2.2显式范围变量类型.
7.16.2.3退化查询表达式.
7.16.2.4 from、let、where、join和order by子句
7.16.2.5 select子句.
7.16.2.6 Group by子句.
7.16.2.7透明标识符.
7.16.3查询表达式模式.
7.17赋值运算符.
7.17.1简单值.
7.17.2复合赋值.
7.17.3事件赋值.
7.18表达式.
7.19常量表达式.
7.20布尔表达式.
8.语句.
8.1结束点和可到达性.
8.2块231
8.3空语句.
8.4标记语句.
8.5声明语句.
8.5.1局部变量声明.
8.5.2局部常量声明.
8.6表达式语句.
8.7选择语句.
8.7.1if语句.
8.7.2 switch语句.
8.8迭代语句.
8.8.1 while语句.
8.8.2do语句.
8.8.3 for语句.
8.8.4 for each语句.
8.9跳转语句.
8.9.1 break语句.
8.9.2 continue语句.
8.9.3go to语句.
8.9.4 return语句.
8.9.5 throw语句.
8.10try语句.
8.11 checked语句和unchecked语句.
8.12lock语句.
8.13 using语句.
8.14 yield语句.
9.命名空间.
9.1编译单元.
9.2命名空间声明.
9.3Extemn别名.
9.4 using指令.
9.4.1 using别名指令.
9.4.2 Using命名空间指令.
9.5命名空间成员.
9.6类型声明.
9.7命名空间别名限定符.
9.7.1别名的唯一性.
10.类.
10.1类声明.
10.1.1类修饰符.
10.1.1.1抽象类.
10.1.1.2密封类.
10.1.1.3静态类.
10.1.2分部修饰符.
10.1.3类型参数.
10.1.4类基本规范.
C#LANGUAGE SPECIFICATION
10.1.4.1基类.
10.1.4.2接实现.
10.1.5类型形参约束.
10.1.6类体.
10.2分部类型.
10.2.1特性.
10.2.2修饰符.
10.2.3类型形参和约束.
10.2.4基类.
10.2.5基接.
10.2.6成员.
10.2.7分部方法.
10.2.8名称绑定.
10.3类成员.
10.3.1实例类型.
103.2构造类型的成员
10.3.3继承.
10.3.4 new修饰符.
103.5访问修饰符.
103.6构成类型.
10.3.7静态成员和实例成员
10.3.8嵌套类型.
103.8.1完全限定名.
10.3.8.2已声明可访问性.
10.3.8.3隐藏.
10.3.8.4 this访问.
103.8.5对包含类型的私有和受保护成员的访问.
103.8.6泛型类中的嵌套类型.
10.3.9保留成员名称.
10.3.9.1为属性保留的成员名称.
10.3.9.2为事件保留的成员名称.
103.9.3为索引器保留的成员名称.
10.3.9.4为析构函数保留的成员名称.
10.4常量.
10.5字段.
10.5.1静态字段和实例字.
10.5.2只读字段.
10.5.2.1对常量使用静态只读字段.
10.5.2.2常量和静态只读字段的版本控制
10.5.3可变字段.
10.5.4字段初始化.
10.5.5变量初始值设定项.
10.6方法.
10.5.5.1静态字段初始化.
10.5.5.2实例字段初始化.
10.6.1方法形参.
10.6.1.1值参数.
10.6.1.2引用参数.
10.6.1.3输出形参.
10.6.1.4形参数组.
10.6.2静态方法和实例方法
10.6.3虚方法.
10.6.4重写方法.
10.6.5密封方法.
10.6.6抽象方法.
10.6.7外部方法.
10.6.8分部方法.
10.6.9扩展方法.
10.6.10方法体.
10.6.11方法重载.
10.7属性.
10.7.1静态属性和实例属性.
10.7.2访问器.
10.7.3自动实现的属性.
10.7.4可访问性.
10.14.4枚举器对象.
10.14.4.1Move Next方法.
13.1.1接修饰符.
10.7.5虚、密封、重写和抽象访问器.
10.8事件.
10.8.1类似字段的事件.
10.8.2事件访问器.
10.8.3静态事件和实例事件.
10.8.4虚、密封、重写和抽象访问器.
10.9索引器.
10.9.1索引器重载.
10.10运算符.
10.10.1一元运算符.
10.10.2二元运算符.
10.10.3转换运算符.
10.11实例构造函数.
10.11.1构造函数初始值设定项.
10.11.2实例变量初始值设定项.
10.11.3构造函数执行.
10.11.4默认构造函数.
10.11.5私有构造函数.
10.11.6可选的实例构造函数形参.
10.12静态构造函数.
10.13析构函数.
10.14迭代器.
10.14.1枚举器接.
10.14.2可枚举接.
10.14.3产生类型.
10.14.4.2 Current属性.
10.14.43 Dispose方法.
10.14.5可枚举对象.
10.14.5.1 GetEnumerator方法.
10.14.6实现示例.
10.15异步函数.
11.结构.
10.15.1返回任务的异步函数计.
10.15.2返回void的异步函数计算.
11.1结构声明.
11.1.1结构修饰符.
11.1.2分部修饰符.
11.1.3结构接.
11.1.4结构体.
11.2结构成员.
11.3类和结构的区别.
11.3.1值语义.
11.3.2继承.
11.3.3赋值.
113.4默认值.
11.3.5装箱和拆箱.
113.6 this的含义.
11.3.7字段初始值设定项.
I13.8构造函数.
11.3.9析构函数.
113.10静态构造函数.
11.4结构示例.
11.4.1数据库整数类型.
11.4.2数据库布尔类型.
12.数组.
12.1数组类型.
12.1.1 System Array类型.
12.1.2数组和泛型I List接.
12.2数组创建.
12.3数组元素访问.
12.4数组成员.
12.5数组协变.
12.6数组初始值设定项.
13.接.
13.1接声明.
13.1.2分部修饰符.
17.1.1特性用法.
17.1.3特性参数类型.
17.4.2.1条件方法.
17.4.2.2条件特性类.
17.4.3 Obsolete特性.
17.4.4调用方信息特性.
17.5.2.1 Indexer Name特性.
18.5.2指针成员访问.
18.5.3指针元素访问.
18.5.4 address-of运算符.
18.5.6指针算术运算.
18.5.8 sizeof运算符.
18.7.3明确赋值检查.
A.2.1 c>.
13.1.3 Variant类型形参列表.
13.1.3.1变化安全性.
13.1.3.2变化转换.
13.1.4基接.
13.1.5接体.
13.2接成员.
13.2.1接方法.
13.2.2接属性.
13.2.3接事件.
13.2.4接索引器.
13.2.5接成员访问.
13.3完全限定接成员名.
13.4接实现.
13.4.1显式接成员实现
13.4.2所实现接的唯一性.
13.4.3泛型方法实现.
134.4接映射.
13.4.5接实现继承.
13.4.6接重新实现.
13.4.7抽象类和接.
14.枚举.
14.1枚举声明.
14.2枚举修饰符.
14.3枚举成员.
14.4 System.Enum类型.
14.5枚举值和运算.
15.委托.
15.1委托声明.
15.2委托兼容性.
15.3委托实例化.
15.4委托调用.
16.异常.
16.1导致异常的原因.
16.2 System.Exception类.
16.3异常的处理方式.
16.4公共异常类.
17.特性.
17.1特性类.
17.1.2定位和命名参数.
17.4.1 Attribute Usage特性.
17.4.2 Conditional特性.
17.2特性说明.
17.3特性实例.
17.3.1特性的编译.
173.2特性实例的运行时检索.
17.4保留特性.
17.4.4.1 Caller Line Number特性.
17.4.4.2 Caller FilePath特性.
17.4.4.3 Caller Member Name特性.
17.5互操作的特性.
17.5.1与COM和Win 32组件的互操作.
17.5.2与其他NET语言的互操作.
18.不安全代码.
18.1不安全上下文.
18.2指针类型.
18.3固定和可移动变量
18.4指针转换.
18.4.1指针数组
18.5表达式中的指针.
18.5.1指针间接寻址
18.5.5指针递增和递减.
18.5.7指针比较.
18.6 fixed语句.
18.7固定大小缓冲区.
18.7.1固定大小缓冲区的声明.
18.7.2表达式中的固定大小缓冲区.
18.8堆栈分配.
18.9动态内存分配.
A.文档注释.
A.1介绍.
A.2建议的标记.
A.2.2 code>.
A.2.3 example>