C#


C# (正體)

C#(发音为C Sharp)是由微软公司所开发的一种面向对象,且运行于.NET Framework之上的高级程序设计语言。并且成为ECMAISO标准规范。C#看似基于C++写成,但又融入其它语言如DelphiJavaVB等。

目录

设计目标

ECMA标准列出的C#设计目标:

  • C#旨在设计成为一种“简单、现代、通用”,以及面向对象的程序设计语言
  • 此种语言的实现,应提供对于以下软件工程要素的支持:强类型检查、数组维度检查、未初始化的变量引用检测、自动垃圾收集(Garbage Collection,指一种自动内存释放技术)。软件必须做到强大、持久,并具有较强的编程生产力。
  • 此种语言为在分布式环境中的开发提供适用的组件开发应用。
  • 为使程序员容易迁移到这种语言,源代码的可移植性十分重要,尤其是对于那些已熟悉C和C++的程序员而言。
  • 对国际化的支持非常重要。
  • C#适合为独立和嵌入式的系统编写程序,从使用复杂操作系统的大型系统到特定应用的小型系统均适用。
  • 虽然C#程序在存储和操作能力需求方面具备经济性,但此种语言并不能在性能和尺寸方面与C语言或汇编语言相抗衡。

语言特性

相对于CC++,这个语言在许多方面进行了限制和增强:

  • 指针(Pointer)只能被用于不安全模式。大多数对象访问通过安全的引用实现,以避免无效的调用,并且有许多算法用于验证溢出,指针只能用于调用值类型,以及受垃圾收集控制的托管对象。
  • 对象不能被显式释放,代替为当不存在被引用时通过垃圾回收器回收。
  • 只允许单一继承(single inheritance),但是一个类可以实现多个接口(interfaces)。
  • C#比C++更加类型安全。默认的安全转换是隐含转换,例如由短整型转换为长整型和从派生类转换为基类。而接口同整型,及枚举型同整型不允许隐含转换,非空指针(通过引用相似对象)同用户定义类型的隐含转换必段被显式的确定,不同于C++的复制构造函数。
  • 数组声明语法不同("int[] a = new int[5]" 而不是 "int a[5]")。
  • 枚举位于其所在的命名空间中。
  • C#中没有模版(Template),但是在C# 2.0中引入了泛型(Generic_programming),并且支持一些C++模版不支持的特性。比如泛型参数中的类型约束。另一方面,表达式不能像C++模版中被用于类型参数。
  • 属性支持,使用类似访问成员的方式调用。
  • 完整的反射支持。

C# 2.0 新特性

在C# 2.0中的新特性有:

  • 分部类(将类型的实现分在多个文件中)。
  • 泛型或参数化类型。
  • 一种新形式的迭代器,类似于Python使用函数式编程风格的yield关键字
  • 匿名方法提供了类似委托的功能,能够将代码块作为委托参数进行传递,而不必创建单独的方法。
  • 委托的协变和逆变
  • 友元程序集(Friend Assembly),程序集(assembly)可以定义为友元(Friend)的,从而能够访问其他程序集的非公共类型。
  • 方法名可以直接当作委托使用
  • 固定缓冲区数组及fixed语法
  • 重新实现接口

C# 3.0 新特性

  • 集合的初始化 (Collection initialization): 提供更简洁的语法进行集合内容的初始化

下面的 C# 2.0 的程式码

PeopleList = new List();
PeopleList.Add("小明");
PeopleList.Add("小王");
PeopleList.Add("大雄");

可以写成

PeopleList=new List{"小明","小王","大雄"};
  • Lamda 表达式(Lambda expressions)
  • 匿名变量
  • 扩展方法(Extension methods)
  • 匿名型别(Anonymous types)
  • LINQ 语法
  • 表达式树(Expression Trees)

但时至今日,C# 3.0的最终标准仍未确定,在正式发布之前以上特性仍有可能修改。

程序的执行

C#并不被编译成为能够直接在计算机上执行的二进制本地代码。与Java类似,它被编译成为中间代码(Byte Code),然后通过.NET Framework虚拟机——被称之为通用语言运行时Common Language Runtime)——执行。

所有的.Net编程语言都被编译成这种被称为MSIL(Microsoft Intermediate Language )的中间代码。因此虽然最终的程序在表面上仍然与传统意义上的可执行文件都具有“.exe”的后缀名。但是实际上,如果计算机上没有安装.Net Framework,那么这些程序将不能够被执行。

在程序执行时,.Net Framework将中间代码翻译成为二进制机器码,从而使它得到正确的运行。最终的二进制代码被存储在一个缓冲区(Buffer)中。所以一旦程序使用了相同的代码,那么将会调用缓冲区中的版本。这样如果一个.Net程序第二次被运行,那么这种翻译不需要进行第二次,速度明显加快。

标准化

微软公司已经向ECMA申请将C#作为一种标准。在2001年12月,ECMA发布了ECMA-334 C#语言规范。C#在2003年成为一个ISO标准(ISO/IEC 23270)。现在有一些独立的实现正在进行,包括:

C#的Hello World程式

下面是一个在命令行上输出Hello World的小程序,这种程序通常作为开始学习程序语言的第一个步骤:

using System;
class HelloWorld
{
  public static void Main()
  {
    Console.WriteLine("Hello, world!");
  }
}

实现

C# 有5个著名的编译器(compilers):

  • 最标准的 C# 的实现当属微软自己推出、并被包含在 .NET Framework 内的 C# 编译器。
  • 微软的Rotor项目(Rotor Project)(目前称为 Shared Source Common Language Infrastructure),提供了 通用语言运行时Common Language Runtime)的实现与 c# 编译器。
  • 由 Novell 赞助的 Mono 项目提供了 C# 编译器,同时也接近百分之百地实现了.NET Framework类库。
  • Dot GNU 项目也提供了另一个自由版本的 C# 编译器, 也提供了.NET Framework类库的实现。
  • Borland 提供了项目级的 C# 集成开发环境,内部所使用的编译器仍是微软.NET Framework所提供的 C# 编译器(这也意味着你仍须安装微软.NET Framework。产品: C# Builder(商业版本),Turbo C# Explorer(免费版本)。

参见

外部链接


! __







Why are we here?
All text is available under the terms of the GNU Free Documentation License
This page is cache of Wikipedia. History