第03章 C#概述

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

第3章C# 概述
目标
阅读和研究本章之后,你应该能够掌握:
.NET Framework
Common Language Runtime
C#的语言特点
C#的编译环境
引言
本章将对C#的基础知识进行简要的介绍,其中包括.NET Framework、Common Language Runtime以及C#的特点等。

本章的目的是让读者快速了解C#的基本概念,希望读者对C#能够有一个基本的认识。

任何一门新技术的学习过程中最开始的部分都比较困难,读者可以不必过分纠缠于本章的名词,只需有一个简单的了解即可。

Framework
Framework介绍
.NET Framework是一个平台,此平台支撑着本书中所要介绍的C#语言。

同样,.NET Framework还支持许多其他语言,如Visual ,VisualC++.NET等。

该平台支持多种应用程序开发,除了典型的Windows窗体应用程序和控制台应用程序之外,还支持Web 应用程序、Web服务等各种类型的应用程序。

应用.NET Framework可以满足应用程序开发的大部分需要。

由于其强大的功能特性和方便易用性,.NET Framework已经成为越来越多的公司和机构的开发工具。

.NET Framework是一个跨平台的平台。

尽管这句话十分拗口,但这是事实,现在已经可以看到应用于PDA手持设备的.NET Framework。

事实上在一开始微软就许诺了.NET Framework的跨平台特性,只是这个工作的进展并没有得到广大开发者的认可。

可以看到,.NET Framework不仅拥有微软的强大技术支持和不断的改进、升级,广大的开发者也为.Net Framework带来不断的惊喜,这都说明了.NET Framework技术拥有良好的前景。

现在列出几个比较热门的网站,以供读者浏览:
/china/msdn/
/
.NET Framework的网络资源非常多,希望读者不要迷失在浩瀚的网络中。

掌握.NET Framework的基础知识是本书的重点内容,也是读者的首要任务。

3.1.2从.NET Framework 1.1到.NET Framework 2.0
.NET Framework1.1已经为广大的开发人员提供了足够多的功能,1.1版本的框架可以支持许多成熟的应用。

但是随着版本的升级和技术的进步,.NET Framework又带来了许多激动人心的惊喜。

本小节可供有.NET Framework1.1开发经验的读者快速阅读,没有经历过.NET Framework1.1开发的读者也可以迅速浏览本小节,以获得直观的认识。

.NET Framework 2.0在.NET Framework 1.1的基础上又提供了许多功能的改进。

除此之外,还增加了许多新功能,如表3.1所示。

表 Framework 2.0新增功能
特性简要介绍
64位平台支持提供对64位计算机的支持
访问控制列表支持添加了允许托管代码创建和修改AcL的新类
已验证身份的流提供NegotiateStream和SslStream类进行身份验证的
支持
COM Interop服务增强功能类和工具中增加了4种支持与COM的互操作性的主要
增强功能
Console类增补提供对控制台窗口的更多控制
数据保护API 包含4种方法,可使应用程序无须调用平台即可加密
密码、密钥、连接字符串等
调试器显示属性控制当调试应用程序时Visual Studio显示类或成员的
方式
调试器编辑并继续支持引入了“编辑并继续”功能
检测网络连接更改NetworkChange类可使应用程序在网络接口(也称为网
卡)的Internet协议(IP)地址发生更改时接收通知分布式计算提供对分布式计算的支持
EventLog增强可以对EventLog消息、参数和类别使用自定义DLL 扩展的证书管理支持X.509证书存储区、证书链和证书扩展
FTP支持可以使用WebRequest、WebResponse和WebClient类访
问文件传输协议资源
泛型和泛型集合引入了泛型,以创建灵活的可重用代码
全球化5个新的全球化功能,对于开发用于不同语言和区域性
的应用程序提供了更广泛的支持
I/O增强功能对各种I/O类的可用性和功能进行了改进
基于清单的激活提供了通过使用清单加载和激活应用程序的新支持.NET Framework远程处理. NET Framework远程处理现在支持IPv6地址以及泛型
类型的交换
获取有关本地计算机网络配置应用程序可以访问IP、IPv4、IPv6、TCP和UDP网络和使用情况的信息流量的统计信息和本地计算使用情况地址和配置信息Ping Ping类可使应用程序确定是否可通过网络访问远程计
算机
应用程序内部HTTP请求可以使用HttpListener类来创建响应HTTP请求的简
单Web服务器
缓存的编程空间通过使用.Cache命名空间中的类,应用
程序可以使用WebRequest、WebResponse和WebClient
类控制所获取资源的缓存
编程语言4种Microsoft编程语言都有不同的改进。

安全性异常System.Security.SecurityException类已得到扩展
串行I/O设备支持新的serialPort类为应用程序提供了访问计算机串行端
口以及与串行I/O设备进行通信的能力序列化BinaryFormatter和SoapFormatter类提供了版本容错序
列化
线程改进支持命名完全在托管代码中创建的进程问通信事件
事务支持应用程序参与由.Microsoft分布式事务协调器
(MSDTC)或本地事务管理器管理的事务强类型资源支持资源文件生成器(Resgen.exe)创建嵌入在可执行文件和
附属程序集中的资源文件
web服务支持使用基于事件的编程模式异步调用Web方法
XML相关的功能提供了许多支持XML的新特性
Windows窗体相关的功能提供了许多新Windows窗体功能
.NET Framework 2.0的新增功能需要读者在学习的过程中不断理解并掌握。

对这些新特性的掌握是建立在掌握.NET Framework 1.1的基础上的,希望读者不要急于深入.NET Framework 2.0的新增功能,打好基础是学习任何一门编程语言的必经之路。

Framework 2.0支持的语言
.NET Framework 2.0除了支持本书所要讲到的C#之外,还提供了对其他语言的支持,包括c++、Visual Basic、JScript等。

它们对应.NET Framework的版本分别为Managed C++、Visual 和。

多样性的语言为.NET Framework的易用性提供了保证。

.NET的另一个诱人的特性就是.NET支持不同语言之问的互相调用。

也就是说,Visual 的开发人员可以使用C#开发人员编写的代码而不用进行语言移植。

随着技术的深入,又出现了传统的Java与.NET之间互调用的技术,甚至J2EE。

3.2Common Language Runtime
通常将.NET Framework分为.NET Framework类库、CLR(Common Language Runtime)和,其中.NET Framework类库和会在本书后面的章节中进行介绍,这里对Common Language Runtime进行简要的介绍。

3.2.1什么是Common Language Runtime
同Java虚拟机JVM(Java Virtual Machine)相似,CLR也是一个运行时环境。

CLR负责内存分配和垃圾回收,也就是通常所说的资源分配,同时保证应用和底层系统的分离。

总而言之,它负责.NET库所开发的所有应用程序的执行。

CLR所负责的应用程序在执行时是托管的,即技术资料中经常出现的managed·词。

托管代码带来的好处即跨语言调用、内存管理、安全性处理等。

CLR隐藏了一些与底层操作系统打交道的环节,使开发人员可以把注意力放在代码所实现的功能上。

非CLR控制的代码即非托管(unmanaged)代码,如C++等,这些语言可以访问操作系统的低级功能。

垃圾回收(Garbage Collection)是.NET中一个很重要的功能,尽管这种思想在其他语言中也有实现。

这个功能保证应用程序不再使用某些内存时,这些内存就会被.NET回收并释放。

这种功能被实现以前,这些复杂的工作主要由开发人员来实现,而这正是导致程序不稳定的主要因素之一。

垃圾回收带来的负面影响就是.NET会频繁地检查内存单元。

虽然精确地得到监视程序运行的开销目前还不能实现,但由此带来的性能降低也得到了微软的承认。

这种性能的降低总体来说还是可以忍受的,来自微软的消息也在不断指出这种消耗的降低。

3.2.2Common Language Runtime的运行机制
在托管的CLR环境中运行代码,其运行机制的示意图如图3.1所示。

图3.1 CLR运行机制示意图
一个典型的.NET程序的运行过程主要包括以下几个步骤:
(1)选择编译器。

为获得公共语言运行库提供的优点,必须使用一个或多个针对运行库的语言编译器。

(2)将代码编译为Microsoft中间语言(MSIL)。

编译将源代码翻译为MSIL并生成所需的元数据。

(3)将MSIL编译为本机代码。

在执行时,实时(JIT)编译器将MSIL(微软中间语言)翻译为本机代码。

在此编译过程中,代码必须通过验证过程,该过程检查MSIL和元数据以查看是否可以将代码确定为类型安全。

(4)运行代码。

公共语言运行库提供使执行能够发生以及可在执行期间使用的各种服务的结构。

3.3C#语言
3.3.1什么是C#
C#是本书所讲述的语言,也是.NET平台上最重要的语言之一。

C#语言源于C和C++,是微软专门为.NET设计的语言。

C#和.NET Framework同时出现和发展。

由于C#出现较晚,吸取了许多其他语言的优点,解决了许多问题。

简单地看来,C#仅仅是.NET开发的一种语言,但事实上C#是.NET开发中最好的一门语言,这是由C#自身的设计决定的。

作为专门为.NET设计的语言,C#不但结合了C++强大灵活和Java语言简洁的特性,还吸取了Delphi和visual Basic所具有的易用性。

因而C#是一种使用简单、功能强大、表达力丰富的全新语言。

C# 是一种简洁、类型安全的面向对象的语言,开发人员可以使用它来构建在.NET Framework 上运行的各种安全、可靠的应用程序。

使用C#,您可以创建传统的Windows 客
户端应用程序、XML Web services、分布式组件、客户端- 服务器应用程序、数据库应用程序以及很多其他类型的程序。

Microsoft Visual C# 2005 提供高级代码编辑器、方便的用户界面设计器、集成调试器和许多其他工具,以在C# 语言版本2.0 和.NET Framework 的基础上加快应用程序的开发。

C# 语法表现力强,只有不到90 个关键字,而且简单易学。

C# 的大括号语法使任何熟悉C、C++ 或Java 的人都可以立即上手。

了解上述任何一种语言的开发人员通常在很短的时间内就可以开始使用C# 高效地工作。

C# 语法简化了C++ 的诸多复杂性,同时提供了很多强大的功能,例如可为空的值类型、枚举、委托、匿名方法和直接内存访问,这些都是Java 所不具备的。

C# 还支持泛型方法和类型,从而提供了更出色的类型安全和性能。

C# 还提供了迭代器,允许集合类的实现者定义自定义的迭代行为,简化了客户端代码对它的使用。

作为一种面向对象的语言,C# 支持封装、继承和多态性概念。

所有的变量和方法,包括Main 方法(应用程序的入口点),都封装在类定义中。

类可能直接从一个父类继承,但它可以实现任意数量的接口。

重写父类中的虚方法的各种方法要求override 关键字作为一种避免意外重定义的方式。

在C# 中,结构类似于一个轻量类;它是一种堆栈分配的类型,可以实现接口,但不支持继承。

除了这些基本的面向对象的原理,C# 还通过几种创新的语言结构加快了软件组件的开发,其中包括:
封装的方法签名(称为委托),它实现了类型安全的事件通知。

属性(Property),充当私有成员变量的访问器。

属性(Attribute),提供关于运行时类型的声明性元数据。

内联XML 文档注释。

在C# 中,如果需要与其他Windows 软件(如COM 对象或本机Win32 DLL)交互,可以通过一个称为“Interop”的过程来实现。

互操作使C# 程序能够完成本机C++ 应用程序可以完成的几乎任何任务。

在直接内存访问必不可少的情况下,C# 甚至支持指针和“不安全”代码的概念。

C# 的生成过程比 C 和C++ 简单,比Java 更为灵活。

没有单独的头文件,也不要求按照特定顺序声明方法和类型。

C# 源文件可以定义任意数量的类、结构、接口和事件。

3.3.2C#2.0的特点
随着C#2.0的发布,c#又为开发人员提供了如表3.2所示的新功能。

表3.2 C#2.0的新增功能
功能描述
泛型C#2.0中添加了一些泛型类型,使开发人员能够实现程度很高的代
码重用,获得更高的集合类性能。

泛型类型只存在arity时上的不同。

也可以将参数强制为特定的类型
迭代器迭代器使得规定foreach循环将如何循环访问集合的内容变得更加容

分部类型分部类型定义允许将单个类(比如某个类)拆分为多个文件。

Visual
Studio 2005窗体设计器使用此功能将它生成的代码与用户代码分离可空类型可空类型允许变量包含未定义的值。

在使用数据库和其他可能包含未
含有具体值的元素的数据结构时,可以使用可空类型匿名方法可以将代码块作为参数来传递。

在本应使用委托的任何地方,都可以
使用代码块来取代,不需要定义新的方法
命名空间符命名空间别名限定符(::)对访问命名空间成员提供了更多控
别名限定制。

global::别名允许访问可能被代码中的实体隐藏的根命名空间静态类若要声明那些包含小能实例化的静态方法的类,静态类就是一种安全
而便利的方式。

要求将类构造函数定义为私有的,以防止类被实例化外部程序集别名通过extern关键字的这种扩展用法引用包含在同一程序集中的同一
组件的不同版本
属性访问器可以为属性的get和set访问器定义不同级别的可访问性
可访问性
委托中的协变传递给委托的方法在返回类型和参数方而可以具有更大灵活性
和逆变
声明、实例化方法组转换为声明委托提供了一种更简单的语法
和使用委托
固定大小的在不安全的代码块中,可以声明包含嵌入数组的固定大小结构
缓冲区
友元程序集程序集可以提供对其他程序集的非公共类型的访问
内联警告控制#pragma警告指令可用于禁用和启用某些编译器警告
V olatile volatile关键字应用于IntPtr和UIntPtr
3.3.3C# 和.NET Framework
C# 编程语言功能强大、安全可靠且易于使用。

作为.NET 计划的一部分,C# 专为与.NET Framework 无缝工作而设计,提供了一种为最快速的服务器和最小的移动设备以及介于这二者之间的一切设备编写可靠的软件的新途径。

与传统的C 和C++ 代码不同,C# 代码并不直接编译成机器语言。

C# 编译器将C# 源代码转换成称为“程序集”的Microsoft 中间语言(MSIL) 文件。

MSIL 文件可由所有基于公共语言运行库(CLR) 的语言创建,包括Visual C++(它还可以创建本机代码)、Visual J# 和Visual Basic。

事实上,不同语言生成的MSIL 在大多数情况下实际上是相同的,这使组合用不同语言编写的不同程序组件变得十分简单。

下面的关系图演示了如何将您编写的C# 代码转换成可执行应用程序:
MSIL 文件显示为标准的.exe 或.dll 文件,但并不直接在Windows 平台上运行,而是由CLR 执行。

CLR 在需要时将MSIL 程序编译成机器码,这一过程称为实时(JIT) 编译。

然后直接执行该机器码。

通过生成独立于硬件的中间代码(只是在最后时刻才转换为机器码),安全性和可移植性都得到了增强。

此过程很大程度上是在程序员不知晓的情况下进行的:编译、执行和分发C# 程序的方法与其他程序相同。

只要在计算机上安装了.NET Framework,C# 程序就可以像任何其他应用程序一样运行。

还值得注意的是,在某些情况下需要将C# 程序集永久性地转换成机器语言,这可以通过Visual Studio 附带的本机映像生成器(ngen.exe) 工具来实现。

因为C# 是专为配合.NET Framework 使用而设计的,所以它非常适合于.NET 开发。

.NET Framework 类库是一个内容非常丰富的类集合,几乎提供了应用程序开发所需要的一切东西,例如文本和图形显示功能、用于存储数据的集合、用于操作XML 文件和数据库的工具以及访问网站的方法,等等。

.NET Framework 通过命名空间来组织其中的功能,每个命名空间通常会包含若干个类。

例如,System.IO 命名空间包含许多用于读取和写入文件的类,而System.Text 命名空间包含许多用于处理字符串数据的类。

浏览.NET Framework 类库参考文档可了解到各种命名空间及其所包含的内容。

3.3.4C#和其他语言的比较
C# 是一种新式的面向组件的语言,具有许多其他.NET Framework 编程语言所共有的功能。

C# 只有约80 个关键字,其中大多数关键字对于任何使用过C、C++、Java 或Visual Basic 的用户来说都很熟悉。

不同语言的关键字之间存在语法差别,但通常差别很小。

Visual C# 速成版编辑环境使学习C# 变得更加容易,因为该环境使用IntelliSense 帮助您完成许多困难的工作。

C# 编辑器会自动保持代码的整洁;建议所需的方法和其他属性并在您键入时突出显示可能存在的错误。

为了让您快速了解C# 程序,这里给出了以几种不同语言编写的著名“Hello, World!”
应用程序:
// C# Hello, World!
using System;
class Program
{
static void Main(string[] args)
{
Console.WriteLine("Hello, World!");
}
}
// C++ Hello, World!
#include <iostream>
using namespace std;
static int main()
{
cout << "Hello World!" << endl;
return 0;
}
' Visual Hello, World!
Module Module1
Sub Main()
Console.WriteLine("Hello, World!")
End Sub
End Module
// Java Hello, World!
class HelloWorldApp
{
public static void main(String[] args)
{
System.out.println("Hello, World!");
}
}
3.3.
4.1C#与C和C++ 比较
内存用垃圾收集系统来管理:没有用来撤消new 调用的Delete 方法。

不使用(.h) 头文件,此类文件也不是必需的。

现在将存储于头文件中的信息作为程序集的一部分存储。

在C# 程序中,类定义中右大括号后不必使用分号。

Main 方法的首字母大写,而且是静态类的成员。

Main 返回int 或void。

每个程序都必须包括Main 方法,否则该程序不能编译。

switch 语句的break 语句不是可选的。

条件必须为Boolean。

默认值由编译器分配(引用类型为null,值类型为0)。

3.3.
4.2C# 与Visual Basic 比较
使用分号而不是分行符。

C# 区分大小写,例如,Main 方法的首字母大写。

条件必须为Boolean。

3.3.
4.3C# 与Java 比较
Main 方法的首字母大写。

在值类型和引用类型之间进行装箱和取消装箱转换:无需创建包装类型。

Java 中的最终类在C# 中是密封类。

C# 支持属性。

默认情况下,C# 方法为非虚拟方法。

为了包括编译器的其他信息,C# 支持属性。

3.4C#的开发环境
Visual Studio是微软公司出品的一款大型应用软件,从最初的Visual Studio 97开始就成为编程的重要工具。

Visual Studio的开发经历了Visual Studio 97、Visual Studio 6.0、Visual Studio.NET(2002)、Visual Studio.NET 2003和Visual Studio 2005。

本节将会对Visual Studio 进行简要的介绍。

进行.NET开发的工具并非只有Visual Studio,最常见的如Windows自带的“记事本”实用程序也可以实现.NET程序开发。

但事实上Visual Studio成为了.NET开发的首选工具。

Visual Studio是一套完整的开发工具集,包含了大量的功能,主要用于生成ASP.NET Web应用程序、XML Web Services、桌面应用程序和移动应用程序。

Visual Basic、Visual C++、Visual C#和Visual J#全都使用相同的集成开发环境(IDE),利用此IDE可以共享工具且有助于创建混合语言解决方案,使程序可以使用不同的语言共同开发。

另外,这些语言利用了.NET Framework的功能,通过此框架可使用简化ASP Web应用程序和XML Web Services 开发的关键技术。

3.4.1Visual Studio 2005
Visual Studio 2005的集成开发环境中为开发人员提供了大量的实用工具以提高工作效率,这些工具包括了自动编译、项目创建向导、创建部署工程等。

Visual Studio 2005还包括许多非常实用的功能,希望读者在不断的使用中掌握这些工具。

事实上,除了Visual Studio和“记事本”之外,还有其他的开发工具可供读者选择。

尽管这些工具没有成为本书的首选,读者还是可以选择性地关注一下这些工具的进展。

这些开发工具包括Sharp Develop、Borland C# Builder和Mono Develop。

此外,还有许多程序员喜爱的编辑器可供使用,如Editplus和UltraEdit等。

相比较于Visual Studio 2003,Visual Studio 2005不仅在.NET版本的支持上发生了变化,而且在许多方面都提供了改进乃至全新的功能。

Visual Studio 2005的新增功能集中在以下几个方面:
开发环境中的新增功能。

代码编辑中的新增功能。

项目、解决方案中的新增功能。

生成、测试和部署中的新增功能。

Visual Studio 2005调试器的新增功能。

Visual Studio 2005中扩展性和自动化的新增功能。

Visual Studio帮助中的新增功能。

可以看到,Visual Studio 2005的新增功能是如此之多,并且在每一个分类中还有细分,此处就不进行一一介绍了,大部分的新增功能会在本书以后的讲解中一一带出,请读者留意。

Visual Studio是一套完整的开发工具集,主要包括对Visual Basic、Visual C++、Visual C#和Visual J#等开发语言的支持。

Visual Studio提供了全面的功能和良好的使用特性,缺点是其价格不菲。

Visual Studio 2005开发环境包含了一系列高效、智能的开发工具,为初学者和经验丰富的企业开发团队都提供了很多崭新的、强大的功能,主要如下: 综合全面的工具平台:Visual Studio 2005为编程初学者和富有经验的企业开发团队都提供了合、全面的开发工具,并提供了良好的支持。

降低开发的复杂度:Visual Studio 2005能够确保开发人员更加方便地发布基于Framework的解决方案,包括Windows应用程序、Web服务、移动解决方案和基
于Office的应用等。

有力的第三方支持:Visual Studio 2005允许开发人员利用来自Visual Studio第三方伙伴参与研发的产品,并体验用来补充Visual Studio 2005第三方解决方案的全
面部署。

加强团队交流:Visual Studio 2005为项目提供全面的生命周期工具,通过使用Visual Studio 2005 Team System,可以增强产品开发周期的参与者之间的交流和沟
通。

Visual Studio 2005主要包括以下几个版本:
Visual Studio 2005 Team System:Visual Studio 2005 Team System是Visual Studio 2005中的重型产品,其中包括高效、集成的产品生命周期工具,协助开发团队在
构建基于.NET Framework 上的解决方案时,能够实现更加快捷、高效地交流与
协作,并捉早预见产品开发的质量,并将这种交流和协作贯穿整个开发过程。

Visual Studio 2005 Professional Edition:Visual Studio 2005 Professional Edition是为专业的开发人员或普通规模开发团队准备的开发环境,适用于构建高性能的多
层应用。

Visual Studio 2005 Professional Edition开发平台使得开发人员可以在这个
高生产力的开发环境下创建各种Windows应用程序、Web服务、移动解决方案和
基于Office的应用。

Visual Studio 2005 Tools for the Microsoft Office System:Visual Studio 2005 Tools for the Microsoft Office System使产品专业开发人员、ISV和系统集成商能够建立
基于Microsoft Office System的功能强大的智能客户端解决方案。

MSDN Subscription:MSDN Subscription使得开发人员和开发团体能够方便地获得Microsoft平台技术,包括Windows操作系统、服务器和Office应用软件等。

MSDN Subscription分为若干层次,其中一些作为Visual Studio产品的附加,便于
开发人员获得所有Microsoft开发工具和平台技术。

MSDN Subscription同时还提
供了设计、开发、构建和测试应用程序过程中所需的技术支持资源和信息。

Visual C# 2005 Express Edition:以及其他各语言的Express Edition版本:Visual Studio 2005 Express版本是面向初学者和入门者的工具。

该版本仅提供了对C#支
持的Visual Stuido 2005中的部分功能,优点是其完全免费。

对于Visual C# 2005
Express Edition感兴趣的读者可以从网址http:
//www.microsoft.com/china/msdn/vstudio/express/default.aspx免费获得。

从下
面的网址可以获得Professional和Team Suite等各个版本的试用版:http:
//www.microsoft.com/china/msdn/vstudio/products/trial/default.aspx。

3.4.2Visual Studio 2005 Express
3.4.3第一个C#程序。

相关文档
最新文档