Visual C#(学习笔记)
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人

1.1 C#语言概述

C#是由Microsoft公司开发的一种新型的编程语言。由于它是从C和C++中派生出来的,因此具有C++的功能;同时,由于是Microsoft公司的产品,它又像Visual Basic一样简单。对于Web开发而言,C#像Java一样,同时具有Delphi和Visual Basic的一些优点。Microsoft宣称:C#是开发.NET框架应用程序的最好语言。

通常,我们对于C#和Visual C#.NET可以不加以区分,但严格来讲,两者是有区别的。C#只是一门语言,或者说是一个标准。它是专门为微软的.NET平台设计的,作为Visual Studio .NET套件中的语言之一(该套件还包括一些其他语言如Visual C++ .NET、Visual Basic .NET等)。今后也可能会出现C#语言的其他开发工具。而Visual C#.NET是指C#语言和.NET框架的总和。

1.1.1 C#语言的特点

C#是一种现代的、面向对象的语言,它结合了C/C++和Visual C++的强大功能,以及Delphi和Visual Basic的易用性。C#具有以下特点。

1. 简单

◆ C#在很多方面与C/C++极其相似。语句、表达式、操作符及一些其他的功能均来自C/C++。同时为了使语言简单,C#做了一些改进,简化了C++在类、命名空间、方法重载和异常处理等方面的操作。

◆ 在C#中,没有C++使用的指针,而采用无用单元收集程序自动管理程序内存。默认情况下,程序员工作在受管理的代码中。

◆ C#提供了一些实用的类型,如金融类型decimal,这给企业级应用开发带来了方便。同时,用户还可以自定义类型。

◆ C#使用统一的类型系统,如字符就是字符,不需要对char,unsigned char,signed char等做出区分。

2. 面向对象

◆ 在C#中,不存在全局函数、变量或常量。所有的东西都封装在类中,包括静态成员和非静态成员。这使C#代码更加易读且有助于减少潜在的命名冲突。

◆ 在C#中,去掉了多重继承,通过利用多个接口隐式地实现多重继承。

3. 类型安全

C#去掉了指针,这从根本上保证了程序的稳定性和类型安全,此外,C#中保证类型安全的措施还有:

◆ 在C#中不允许使用未初始化的变量。编译器负责将对象的成员变量清零,并将所有动态分配的对象和数据都初始化为零,而局部变量则由程序员自己负责初始化。

◆ C#会进行边界检查。如果访问一个有n个元素的数组,则C#自动检查数组的边界,不允许越界访问第n+1个元素。

◆ C#取消了不安全的类型转换。不能把一个整型强制转换为一个引用类型(如对象),而当向下转换时,C#验证这种转换是正确的。也就是说,派生类事实上是从向下转换的那个类派生出来的。

4.版本控制

几乎所有的程序员都遇到过“DLL地狱”,就是在同一台机器上安装了DLL相同的不同应用程序版本。有时,老版本的应用程序能够很好地和新版本的DLL一起工作,但是更多的时候它们会中断运行。

C#从以下两个方面来解决这个问题。

◆ 内建语言支持。C#命名空间支持了版本,如在不同的命名空间中定义同名类不会引起名字的冲突,也就是说,如果在命名空间Namespace1中定义了一个类student,那么在命名空间Namespace2中再定义一个student类不会引起冲突。

◆ CLR环境的支持。CLR提供并行执行(side-by-side execution)功能,即允许同时运行同一类型的多个版本。

提示

并行执行通过提供与以前版本的兼容性,使代码具有更大的灵活性。例如:类student支持并行运行,而student的两个版本(版本1和版本2)之间不兼容。假设有一个应用程序与版本1有关,而与版本2无关。此时应用程序可以访问版本1,而不需要考虑机器上可能安装了student的新版本2

并行执行有两种:在同一台计算机上并行执行和在同一个进程中并行执行。

1.1.2 C#与C/C++的关系

C#是从C/C++语言演变改进而来的,存在一定的血缘关系。C#基本上继承了C语言的语法风格,同时,又从C++那里继承了面向对象的特性。但是,不能够简单地将C#看成是C/C++语言在.NET上的翻版,它们之间存在很明显的不同点。

◆ C#语言不再提供指针类型的支持,而使用ref和out参数代替指针类型,使得程序不能随便访问内存的地址空间,从而使程序更加健壮。

◆ 在面向对象技术方面,C#不再支持多重继承,避免了以往类层次结构中由于多重继承带来的可怕后果,相应的功能通过对接口的多重继承来实现。

◆ 在C#中,类和结构体在语意上是不相同的。结构体是一种值类型,而类是一种引用类型。

◆ 在C#中,引入了泛型的概念,使得代码能够重复利用,减少了代码的编写量。

1.1.3 C#与Java相比较

从整体上来看,C#和Java极其相似,甚至超过了C#与C/C++的相似程度,下面是两种语言的比较。

◆ 两者都能编译成跨平台、跨语言的代码,而且代码能够在一个受控制的环境中运行。

◆ 都不需要头文件,所有的代码都被限制在某个范围内,并且因为没有头文件,所以消除了类定义的循环依赖。

◆ 自动回收垃圾内存,并且取消了指针类型。

◆ 所有的类都是派生出来的,并且必须使用New关键字分配内存。

◆ 没有全局函数或全局变量,一切变量和函数都属于类。

◆ 数组和字符串都自带长度计算和边界检查。

◆ 不能使用整数来返回到if条件语句中,必须使用布尔变量。

◆ 只使用“.”操作符,没有“->”和“::”操作符。

◆ 都具有接口的概念。

不过,两者还是存在区别的,例如:Java通过Java虚拟机来实现平台的可移植性,而C#则首先被编译成一种中间语言,然后在执行时由公共语言运行时中的即时编译器编译成本地代码交与CPU进行处理。而且,Java虚拟机只能执行Java程序,而即时编译器能够编译任何.NET框架支持的语言(如C#、Visual Basic和J#)编写的程序。

1.1.4 C# 2.0新增功能

随着C# 2.0的发布,C#又为开发人员提供了一些新的功能,如表1-1所示。

表1-1 C# 2.0新增功能

同样编译器也作了一些改变,表1-2所示是编译器新增的功能和更改的内容。

表1-2 编译器新增的功能和更改的内容

C#可以实现大多数程序员需要的功能。应用C#,可以进行Windows应用程序、Windows控件库、Web应用程序、Windows服务、Web服务、报表应用程序和Office程序等的开发。