博客园  :: 首页  :: 新随笔  :: 订阅 订阅  :: 管理

天轰穿C#教程之C#有哪些特点?

Posted on 2012-09-19 08:43  天轰穿  阅读(1047)  评论(1编辑  收藏  举报

  C#的核心语法和Java的语法很相似。然而,并不能说C#抄袭了Java。C#和Java都属于C语言系列(包括C、Objective C、C++等),它们有类似的语法。正如Java在许多方面是C++的提炼版一样,C#也可以视为Java的提炼版。

  

  实际上,C#的许多语法结构与VB 6.0和C++的很多方面都大有渊源。例如,与VB6类似,C#支持正式的类型属性(property,即内部用get、set来实现)的概念(与传统的获取方法和设置方法相反),且支持方法使用参数数组。与C++类似,C#允许重载运算符,且支持创建结构、枚举和使用委托。

  

  C#是多种语言的混合体,因此它像Java一样语法简洁,像VB6一样使用简单,像C++一样功能强大和灵活(C#没有像C++那样麻烦的位操作)。

  

  作为一种重新设计的语言,C#具备了更多有用的特性而摈弃了很多缺点。同C++相比,C#至少具有如下的特征:

  

  简洁的语法结构

  

  从执行效率上讲,C++无疑是一门优秀的程序设计语言。但其复杂的特性(指针、复杂的操作符、模板)往往让人望而生畏。为了更容易被大众所接受,C#抛弃了那些实现复杂而又用处不大的特性,使得语法结构变得十分简洁。比如,C#中不再使用"::"和"->"操作符,而统一用"."替代;再如,C#不再使用前向声明(头文件声明),因为声明的顺序对于程序而言其实不重要;再比如,C#中不使用#include关键字,基本不再使用指针。

  

  类型安全

  

  在.NET公用语言运行库(Common Language Runtime)的支持下,C#支持一种称之为类型安全(Type Safe)的内存访问机制。通过这种方式,可以避免程序访问不允许访问的内存(没有一个C++程序员敢声称自己没有用指针存取过不属于自己的内存),这样就可以减少不当访问引起的内存崩溃以及由此造成的安全漏洞。

  

  自动内存管理(垃圾收集)

  

  在C++中,内存需要人工管理,即用new或者Alloc分配的内存必需在程序结束之前释放掉。而这件事又很容易被程序员忽略,造成资源浪费和系统性能下降。C#的运行库(也就是.NET的CLR)支持内存垃圾回收器,会在运行过程中自动回收内存。

  

  与.NET类库的完美结合

  

  Microsoft .NET框架提供一套面向对象的系统类库。由于这一套类库是面向对象的,而且通过名字空间很好的组织,因此,在.NET下,C#语言(VB、Managed C++、Jscript)能很方便地应用这套类库实现功能。当然,在C#中,也可以绕过.NET类库直接访问Windows API,但这样做的后果将是跨平台特性的丧失。因为其它的平台并不支持Windows API。

  

  跨平台、跨语言特性

  

  同Java一样,作为新一代的程序设计语言,C#也支持跨平台特性。基于名为MSIL的中间代码及不同平台上.NET的JIT编译器,C#在这一方面并不比Java逊色(当然,要提供各种系统平台上的JIT支持,还需要一段时间)。此外,由于C#的运行是基于公用语言运行库(CLR)及共用语言子集(CLS)的,因此还具备良好的跨语言特性。这将极大的方便应用系统的设计,C++、Java、VB、C#等语言可以相互无障碍的引用,而且这种范围还在不断扩大,据称,现在COBOL等更多的语言也获得了.NET平台的支持。

  

  其他支持.NET 的编程语言

  

  包含了Lambda运算符(=>),它可以进一步简化.NET委托类型的使用。

  

  新的对象初始化语法,它允许我们在对象创建时设置属性的值。

  

  关于C#语言,要理解的最重要的一点可能是,它生成的代码只能在.NET运行库中执行(你不能用C#来构建本机的COM服务器或非托管的Win32 API应用程序)。正式的说法是,这种必须在.NET运行库下执行的代码称为托管代码(managed code)。这些包含托管代码的二进制单元可以称为程序集(assembly)。反之,不能或者不需要直接在.NET运行库承载的代码称为非托管代码(unmanaged code)。