没有合适的资源?快使用搜索试试~ 我知道了~
首页C#6.0 语言规范中文版.pdf
C#6.0 语言规范中文版.pdf
需积分: 50 603 浏览量
更新于2023-05-28
评论
收藏 3.15MB PDF 举报
该资源包含的PDF主要是介绍C# 6.0 语言规范,并且也详细描述了基本的词法结构、以及在C#里面常见的概念解说(如类型、类、命名空间等),对于新手而言是蛮不错的资源,帮助理解。
资源详情
资源评论
资源推荐

介绍
2020/5/28 • • Edit Online
Hello world
using System;
class Hello
{
static void Main() {
Console.WriteLine("Hello, World");
}
}
csc hello.cs
Hello, World
C#(读作“See Sharp”)是一种简单易用的新式编程语言,不仅面向对象,还类型安全。 C#具有 C 语言系列中的根,并
将对 C、 C++和 Java 程序员立即熟悉。 C#由 ECMA 国际标准化为
ecma-334ecma-334
标准,并按 iso/Iec (
iso/iec 23270iso/iec 23270
标
准)标准化。 Microsoft 的C# .NET Framework 编译器是这两个标准的一致性实现。
C# 是一种面向对象的语言。不仅如此,C# 还进一步支持
面向面向组组件的件的
编程。 当代软件设计越来越依赖采用自描述的
独立功能包形式的软件组件。 此类组件的关键特征包括:为编程模型提供属性、方法和事件;包含提供组件声明性信
息的特性;包含自己的文档。 C#提供语言构造以直接支持这些概念,并C#使用一种非常自然的语言来创建和使用软
件组件。
多项 C# 功能有助于构造可靠耐用的应用程序:
垃圾回收垃圾回收
自动回收未使用的对象占用的内存;
异常异常处处理理
提供了一种
结构化的可扩展方法用于错误检测和恢复;而且,语言的
类类型安全型安全
设计使得不可能从未初始化的变量中进行读取,将
数组索引在其边界之外,或者执行未检查的类型转换。
C# 采用
统统一的一的类类型系型系统统
。 所有 C# 类型(包括 int 和 double 等基元类型)均继承自一个根 object 类型。 因此,
所有类型共用一组通用运算,任何类型的值都可以一致地进行存储、传输和处理。 此外,C# 还支持用户定义的引用
类型和值类型,从而支持对象动态分配以及轻量级结构的内嵌式存储。
为了确保程序C#和库能够以兼容的方式在一段时间内演化,重点在于设计中C#的
版本控制版本控制
。 许多编程语言很少关
注这个问题,因此,当引入新版依赖库时,用这些语言编写的程序会出现更多不必要的中断现象。 由版本C#控制注
意事项直接影响的设计方面包括单独 virtual 的和 override 修饰符、方法重载决策的规则以及对显式接口成员声明
的支持。
本章的其余部分介绍了该C#语言的重要功能。 尽管后面的章节介绍了以详细的方式(有时也是数学方式)的规则和
例外,但本章采用的是以完整性为代价来提高清晰度和简洁性。 目的是为读者提供一篇有助于编写早期程序和阅读
后续章节的语言。
“Hello, World”程序历来都用于介绍编程语言。 下面展示了此程序的 C# 代码:
C# 源文件的文件扩展名通常为 .cs 。 假设 "Hello,World" 程序存储在文件 hello.cs 中,则可以使用命令行通过
Microsoft C#编译器编译该程序
这会生成一个名为 hello.exe 的可执行程序集。 此应用程序在运行时生成的输出为

程序结构
using System;
namespace Acme.Collections
{
public class Stack
{
Entry top;
public void Push(object data) {
top = new Entry(top, data);
}
public object Pop() {
if (top == null) throw new InvalidOperationException();
object result = top.data;
top = top.next;
return result;
}
class Entry
{
public Entry next;
public object data;
public Entry(Entry next, object data) {
this.next = next;
this.data = data;
}
}
}
}
“Hello, World”程序始于引用 System 命名空间的 using 指令。 命名空间提供了一种用于组织 C# 程序和库的分层
方法。 命名空间包含类型和其他命名空间。例如, System 命名空间包含许多类型(如程序中引用的 Console 类)和
其他许多命名空间(如 IO 和 Collections )。 借助引用给定命名空间的 using 指令,可以非限定的方式使用作为
相应命名空间成员的类型。 由于使用 using 指令,因此程序可以使用 Console.WriteLine 作为
System.Console.WriteLine 的简写。
“Hello, World”程序声明的 Hello 类只有一个成员,即 Main 方法。 方法 Main 是 static 通过修饰符声明的。 实例
方法可以使用关键字 this 引用特定的封闭对象实例,而静态方法则可以在不引用特定对象的情况下运行。 按照约
定, Main 静态方法是程序的入口点。
程序的输出是由 System 命名空间中 Console 类的 WriteLine 方法生成。 此类由 .NET Framework 类库提供,默认
情况下,由 Microsoft C#编译器自动引用。 请注意C# ,自身没有单独的运行时库。 相反,.NET Framework 是的C#运
行时库。
C# 中的关键组织结构概念包括
程序程序
、
命名空命名空间间
、
类类型型
、
成成员员
和
程序集程序集
。 C# 程序由一个或多个源文件组成。 程序声
明类型,而类型则包含成员,并被整理到命名空间中。 类型示例包括类和接口。 成员示例包括字段、方法、属性和事
件。 编译完的 C# 程序实际上会打包到程序集中。 程序集通常具有文件扩展名 .exe 或 .dll ,具体取决于它们是否
实现
应应用程序用程序
或
库库
。
示例
在名 Stack Acme.Collections 为的命名空间中声明一个名为的类。 此类的完全限定的名称为
Acme.Collections.Stack 。 此类包含多个成员:一个 top 字段、两个方法( Push 和 Pop )和一个 Entry 嵌套类。
Entry 类还包含三个成员:一个 next 字段、一个 data 字段和一个构造函数。 假定示例的源代码存储在 acme.cs
文件中,以下命令行

csc /t:library acme.cs
using System;
using Acme.Collections;
class Test
{
static void Main() {
Stack s = new Stack();
s.Push(1);
s.Push(10);
s.Push(100);
Console.WriteLine(s.Pop());
Console.WriteLine(s.Pop());
Console.WriteLine(s.Pop());
}
}
csc /r:acme.dll test.cs
100
10
1
类型和变量
将示例编译成库(不含 Main 入口点的代码),并生成 acme.dll 程序集。
程序集包含
中中间语间语言言
(IL)指令形式的可执行代码和
元数据元数据
形式的符号信息。 执行前,程序集中的 IL 代码会被 .NET
公共语言运行时的实时 (JIT) 编译器自动转换成处理器专属代码。
由于程序集是包含代码和元数据的自描述功能单元,因此无需在 C# 中使用 #include 指令和头文件。 只需在编译
程序时引用特定的程序集,即可在 C# 程序中使用此程序集中包含的公共类型和成员。 例如,此程序使用 acme.dll
程序集中的 Acme.Collections.Stack 类:
如果程序 test.cs 存储在文件中,则编译时 test.cs , acme.dll 可以使用编译器的 /r 选项来引用程序集:
这会创建 test.exe 可执行程序集,它将在运行时输出以下内容:
使用 C#,可以将程序的源文本存储在多个源文件中。 编译多文件 C# 程序时,可以将所有源文件一起处理,并且源
文件可以随意相互引用。从概念上讲,就像是所有源文件在处理前被集中到一个大文件中一样。 在 C# 中,永远都不
需要使用前向声明,因为声明顺序无关紧要(除了极少数的例外情况)。 C# 并不限制源文件只能声明一种公共类型,
也不要求源文件的文件名必须与其中声明的类型相匹配。
C# 有两种类型:
值类值类型型
和
引用引用类类型型
。 值类型的变量直接包含数据,而引用类型的变量则存储对数据(称为“对象”)的
引用。 对于引用类型,两个变量可以引用同一对象;因此,对一个变量执行的运算可能会影响另一个变量引用的对
象。 借助值类型,每个变量都有自己的数据副本;因此,对一个变量执行的运算不会影响另一个变量( ref 和 out
参数变量除外)。
C#的值类型进一步划分为
简单类简单类型型
、
枚枚举类举类型型
、
结结构构类类型型
和
可以可以为为 null null 的的类类型型
, C#并且的引用类型进一步分
为
类类类类型型
、
接口接口类类型型
、
数数组类组类型型
和
委托委托类类型型
。
下表提供了C#的类型系统概述。

值类型 简单类型 有符号的整型: sbyte 、 short 、 int 、
long
无符号的整型: byte 、 ushort 、 uint
、 ulong
Unicode 字符: char
IEEE 浮点: float 、 double
高精度小数: decimal
布尔: bool
枚举类型 格式为 enum E {...} 的用户定义类型
结构类型 格式为 struct S {...} 的用户定义类
型
可以为 null 的类型 值为 null 的其他所有值类型的扩展
引用类型 类类型 其他所有类型的最终基类: object
Unicode 字符串: string
格式为 class C {...} 的用户定义类
型
接口类型 格式为 interface I {...} 的用户定
义类型
数组类型 一维和多维,例如 int[] 和 int[,]
委托类型 格式为的用户定义的类型,例如
delegate int D(...)
//
有符号整型 8 sbyte -128...127
八个整型类型支持带符号或不带符号格式的 8 位、16 位、32 位和 64 位值。
这两个浮点类型( float 和 double )使用32位单精度和64位双精度 IEEE 754 格式表示。
decimal 类型是适用于财务和货币计算的 128 位数据类型。
C#的 bool 类型用于表示布尔值( true 或 false 的值)。
C# 使用 Unicode 编码处理字符和字符串。 char 类型表示 UTF-16 代码单元, string 类型表示一系列 UTF-16 代
码单元。
下表汇总了C#的数值类型。
剩余461页未读,继续阅读











星享社学长
- 粉丝: 58
- 资源: 14
上传资源 快速赚钱
我的内容管理 收起
我的资源 快来上传第一个资源
我的收益
登录查看自己的收益我的积分 登录查看自己的积分
我的C币 登录后查看C币余额
我的收藏
我的下载
下载帮助

会员权益专享
安全验证
文档复制为VIP权益,开通VIP直接复制

评论0