C#
语言规范
版本5.0
注意
© 1999-2012 Microsoft Corporation。保留所有权利。
Microsoft、Windows、Visual Basic、Visual C# 和 Visual C++ 是 Microsoft Corporation 在美国和/或其他国家/地区的注册商标或商标。
本文提及的其他产品和公司名称可能是其各自所有者的商标。


1. 介绍
C#(读作“See Sharp”)是一种简洁、现代、面向对象且类型安全的编程语言。C# 起源于 C 语言家族,因此,对于 C、C++ 和 Java 程序员,可以很快熟悉这种新的语言。C# 已经分别由 ECMA International 和 ISO/IEC 组织接受并确立了标准,它们分别是 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# 类型(包括诸如 intdouble 之类的基元类型)都继承于单个根类型:object。因此,所有类型都共享一组通用操作,并且任何类型的值都能够以一致的方式进行存储、传递和操作。此外,C# 同时支持用户定义的引用类型和值类型,既允许对象的动态分配,也允许轻量结构的内联存储。
为了确保 C# 程序和库能够以兼容的方式逐步演进,C# 的设计中充分强调了版本控制 (versioning)。许多编程语言不太重视这一点,导致采用那些语言编写的程序常常因为其所依赖的库的更新而无法正常工作。C# 的设计在某些方面直接考虑到版本控制的需要,其中包括单独使用的 virtualoverride 修饰符、方法重载决策规则以及对显式接口成员声明的支持。
本章的其余部分将描述 C# 语言的基本特征。尽管后面的章节会更为详尽,有时甚至逻辑缜密地对规则和例外情况进行描述,但本章的描述力求简洁明了,因而难免会牺牲完整性。这样做是为了向读者提供关于该语言的概貌,一方面使读者能尽快上手编写程序,另一方面为阅读后续章节提供指导。
1.1 Hello world
按照约定俗成的惯例,我们先从“Hello, World”程序着手介绍这一编程语言。下面是它的 C# 程序:
using System;
class Hello
{
    static void Main() {
        Console.WriteLine("Hello, World");
    }
}
C# 源文件的扩展名通常是 .cs。假定“Hello, World”程序存储在文件 hello.cs 中,可以使用下面的命令行调用 Microsoft C# 编译器编译这个程序:
csc hello.cs
编译后将生成一个名为 的可执行程序集。当此应用程序运行时,输出结果如下:
Hello, World
“Hello, World”程序的开头是一个 using 指令,它引用了 System 命名空间。命名空间提供了一种分层的方式来组织 C# 程序和库。命名空间中包含有类型及其他命名空间 — 例如,System 命名空间包含若干类型(如此程序中引用的 Console后端字符串转数组 类)以及若干其他命名空间(如 IOCollections)。如果使用 using 指令引用了某一给定命名空间,就可以通过非限定方式使用作为该命名空间成员的类型。正是由于使用了 using 指令,该程序才可以采用 Console.WriteLine 这一简化形式代替 System.Console.WriteLine
“Hello, World”程序中声明的 Hello 类只有一个成员,即名为 Main 的方法。Main 方法是使用 static 修饰符声明的。实例方法可以使用关键字 this 来引用特定的封闭对象实例,而静态方法的操作不需要引用特定对象。按照惯例,名为 Main 的静态方法将作为程序的入口点。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。