1.1 认识C#
C#的全称为C sharp,读为“C霎普”。在本节中,将介绍C#语言的由来和特点,大致了解C#语言的基本情况。本章还会对Visual Studio 2010集成开发环境的安装和使用进行简单的介绍,安装好开发环境后,就能更好地对C#语言进行进一步的学习。
1.1.1 C#的由来
在1998年,Delphi语言的设计者Hejlsberg带领着Microsoft公司的开发团队,开始了第一个版本C#语言的设计。在2000年9月,国际信息和通信系统标准化组织为C#语言定义了一个Microsoft公司建议的标准。最终C#语言在2001年得以正式发布。
C#语言是建立在.NET Framework环境之上的,.NET Framework是一个类库。其为C#语言开发的应用程序提供了强大的类库支持,但是,它不仅仅支持C#语言,还支持VB.NET和C++的托管方式。C#语言是.NET Framework平台首选的开发语言。也可以这样说:C#语言就是为.NET Framework平台而产生的语言。
注意:C#语言用于生成面向.NET环境的代码,但是它不是.NET环境的一部分,初学者很容易把.NET和C#语言混为一谈。C++运行在.NET Framework之上的叫做C++的托管方式,由公共语言运行库环境.NET Framework执行,而不是直接由操作系统执行的代码就是托管代码。
.NET对开发人员来说十分重要。因为它不但改变了开发人员开发应用程序的传统方式,而且可以使开发人员能快速创建出全新的各种应用程序,大幅度地提高了软件的生产效率。Microsoft公司推出.NET的目的在于完全消除当今计算技术中的所有缺陷,实现用户从任何地点、任何设备都可访问其个人数据和应用程序的宏伟蓝图。
1.1.2 C#的特点
C#语言主要有6个特点,即生成中间代码、在命名空间中声明、数据类型丰富、有两个基本类、方法可当做参数传递、与COM集成。下面将分别简要介绍这些特点,初学者只需了解即可,并不要求更深层次的掌握。
· 生成中间代码:使用C#开发的应用程序,在编译成机器码时,都是生成中间汇编形式的语言。只有当它们运行时,才会被编译成本地计算机可执行的代码。如图1.1所示,说明了.NET环境下中间的公共语言运行模式。
提示:使用C#、VB.NET、C++托管版本的语言编写程序,都是生成中间语言执行的,而不是直接被计算机的CPU和操作系统直接执行,在这一点上和Java语言类似。有的初学者会认为C#是被计算机的CPU直接执行的。
· 在命名空间中声明:当使用C#语言创建一个应用程序时,就会在一个命名空间里创建一个或多个类。同时在这个命名空间里,还有可能声明要有结构体、变量等。这时就必须使用using关键字来引用其他的命名空间内容,用来支持对结构体等类型的操作。例如,对SQL Server数据库操作时用的命名空间如下所示。
using System.Data.SqlClient; //提供了对SQL Server数据库操作的许多类
· 可以形象地说,命名空间就像一个文件夹,其中的对象就像一个个文件一样,不同文件夹内的文件可以重名。在使用重名的文件时,只需要说明是哪个文件夹下的就可以了,它们虽然是同名,但不是等同的。图1.2形象地说明了这个问题。
图1.1 .NET环境下的中间汇编形式的语言
图1.2 文件a属于不同的命名空间
· 丰富的数据类型:C#语言拥有比C、C++更广泛和丰富的数据类型。例如bool、byte、ubyte、short、ushort、int、uint、long、ulong、float、double、decimal等,具体每一种是什么意思,会在第2 章中有更详细的讲解,在这里读者可以凭其英文意思进行初步理解。这些数据类型都有一个固定的大小,在内存中表现为有固定的长度,每种数据类型都可分为有符号和无符号两种类型,如图1.3所示。
注意:在计算机语言中,有符号和无符号是指变量的值是否有正号或负号,无符号型数据只有正数类型。一般地,有符号数据类型用得多一些。
图1.3 丰富的数据类型
· 有两个基本类:此处要介绍的内容会涉及类的知识,相关内容会在本书第4章中学到,此处就先作为了解,不要求掌握。在C#语言中,Object类是所有其他类的基类。String类和Object类一样,是两个基类之一,它们都是C#语言的一部分。
· 方法可当参数传递:在一般情况下,默认的参数传递只是对基本数据类型进行值传递。但是在C#语言中,既可以通过值传递,也可以通过引用传递。通过引用传递参数允许函数成员(包括方法、属性、索引器、运算符)和构造函数等传递参数的值。
· 与COM集成:COM技术是Microsoft公司的Win32组件技术。C#语言能与COM组件进行无缝集成。用C#语言编写的类可以子类化COM组件,所谓子类化就是指替换窗口的过程。C#语言生成的类也可以当做一个COM组件使用,可用任何.NET语言进行子类化。
· 索引下标:此处的内容也不要求掌握,作为初步了解。一个索引或属性不使用属性名来引用类成员,而是用一个方括号中的数字来匿名引用,就像用数组的下标一样。例如a=array[4],这里的4就是下标。数组的知识将会在第2章中介绍,这里只作简单的入门介绍。
1.1.3 C#与C++的区别
从语言体系上讲,C#语言属于C语言家族,是对C语言和C++语言的发展。它沿用并且发展了C++的基本思想,又去除和限制了一些相对比较难的技术。例如限制了指针,在C#语言中使用指针只能在不安全代码中才能使用。
从标准化的角度讲,C#语言是Microsoft公司在C++基础上扩充发展出来的。它并不是一个国际化标准,它只是Microsoft公司的一个产品。但是C++是国际化的标准,有标准的组织在维护,它并不属于任何一个公司或者组织。
警告:特别要强调C++和VC++的区别和联系,很多初学者常把两者看做是同一个事物。这是错误的,也是相当一部分初级程序员模糊的问题。VC++是Microsoft公司添加了许多类库以后的一种C++版本,这些类库主要是Windows平台上一些API的封装,所以用VC++开发Windodws应用程序可省去很多麻烦的过程。
从技术应用角度讲,C#语言在C++基础上扩充和发展出来以后,更注重于实际开发应用,在思想上完全面向对象。限制了C++的一些底层的东西,又增加了一些新的功能,例如自动回收内存。但这些功能的扩充,导致了C#语言不可能像C++那样在底层控制上自由、灵活、效率高。但这种改进在软件开发效率上有很大的提高,同时。对于学习者入门的要求也降低了。
总的来说,C#语言是为了提升软件开发效率将软件工业化的产物,也是Microsoft公司为了市场竞争而推出的一个产品。其竞争的对象就是Java语言,或者说Java EE平台,两者的运行机制非常相似。相比之下,C#语言可以做到的事情C++语言都能做到,并且更完全、更面向计算机底层,在一定程度上效率更高。只不过用C++实现会更加复杂,对程序员的要求也更高。
注意:很多初学者看到计算机底层这个概念,往往思考得不太清楚。在程序设计或整个计算机系统中,说底层其实就是和计算机硬件接近的程度。例如,说汇编语言很底层,就是说汇编语言更接近硬件。说到上层应用,大多数情况下,都是一些业务逻辑上的开发,它们和硬件的关系并不大。