书籍详情

C#高级编程(第3版)

C#高级编程(第3版)

作者:(美)Simon Robinson,(美)Christian Nagel等著;李敏波翻译;李敏波译

出版社:清华大学出版社

出版时间:2005-06-01

ISBN:9787302101994

定价:¥128.00

购买这本书可以去
内容简介
  对于开发人员来说,把C#语言及其相关环境.NET Framework描述为多年来最重要的新技术一点都不夸张。.NET提供了一种新环境。在这个环境中,可以开发出运行在Windows上的几乎所有应用程序,而C#是专门用于.NET的新编程语言。例如,使用C#可以编写出动态Web页面、XML Web服务、分布式应用程序的组件、数据库访问组件或传统的Windows桌面应用程序。本书介绍.NET Framework 1.1,即.NET Framework的第2版,但本书的大部分内容也适用于.NET Framework 1.0。如果使用1.0版本进行编码,就需要作一些修改,本书将在需要修改的地方指出要修改的内容。不要被.NET这个名称所愚弄,这个名称仅强调Microsoft相信分布式应用程序是未来的趋势,即处理过程分布在客户机和服务器上,但C#不仅仅是编写Internet或与网络相关的应用程序的一种语言,它还提供了一种编写Windows平台上几乎任何类型的软件或组件的方式。另外,C#和.NET都对编写程序的方式进行了革新,更易于实现在Windows上编程。这是一个相当重要的声明。毕竟,我们都知道计算机技术的发展速度非常快,每年Microsoft都会推出新软件、新的编程工具或Windows的新版本,并宣称这些对开发人员都非常有用,.NET和C#也不例外。.NET和C#的重要性为了理解.NET的重要性,考虑一下近10年来出现的许多Windows技术的本质会有一定的帮助。尽管所有的Windows操作系统在表面上看来完全不同,但从Windows 3.1(1992年)到Windows Server 2003,在内核上都有相同的Windows API。在我们转而使用Windows的新版本时,API中增加了非常多的新功能,但这是一个演化和扩展API的过程,并非是替换它。开发Windows软件所使用的许多技术和架构也是这样。例如,COM (Component Object Model,组件对象模型)是作为OLE (Object Linking and Embedding,对象链接和嵌入)开发出来的,那时,它在很大程度上仅是把不同类型的办公文档链接在一起,所以利用它可以把一个小Excel电子表格放在Word文档中。之后,它逐步演化为COM、DCOM (Distributed COM,分布式组件对象模型)和最终的COM+。COM+是一种复杂的技术,它是几乎所有组件通信方式的基础,实现了事务处理、消息传输服务和对象池。Microsoft选择这条道路的原因非常明显:它关注向后的兼容性。在过去的这些年中,第三方厂商编写了相当多的Windows软件,如果Microsoft每次都引入一项不遵循现有代码基础的新技术,Windows就不会获得今天的成功。向后兼容性是Windows技术的极其重要的特性,也是Windows平台的一个长处,但它有一个很大的缺点。每次某项技术进行演化,增加了新功能后,都会比它以前更复杂。很明显,对此必须进行改进。Microsoft不可能一直扩展这些开发工具和语言,使它们越来越复杂,既要保证能跟上最新硬件的发展步伐,又要与20世纪90年代初开始流行的Windows产品向后兼容。如果要得到一种简单而专业化的语言、环境和开发工具,让开发人员轻松地编写优秀的软件,就需要一种新的开端。这就是C#和.NET的作用。粗略地说,.NET是一种在Windows上编程的新架构—— 一种新API。C#是一种新语言,它可以利用.NET Framework及其开发环境中的所有新特性,以及在最近20年来出现的面向对象的编程方法。在继续介绍前,必须先说明,向后兼容性并没有在这个演化进程中失去。现有的程序仍可以使用,.NET也兼容现有的软件。软件组件在Windows上的通信,现在几乎都是使用COM实现的。因此,.NET能够提供现有COM组件的包装器(wrapper),以便.NET组件与之通信。Microsoft已经扩展了C++,提供了一种新语言J#,还对VB进行了很多改进,把它转变成为功能更强大的VB.NET,并允许把用这些语言编写的代码用于.NET环境。但这些语言都因有多年演化的痕迹,所以不能完全用现在的技术来编写。本书将介绍C#编程技术,同时提供.NET体系结构工作原理的必要背景知识。我们不仅会介绍C#语言的基础,还会给出使用各种相关技术的应用程序示例,包括数据库访问、动态的Web页面、先进的图形技术和目录访问等。惟一的要求是用户至少熟悉一门在Windows上使用的高级语言,例如C++、VB或J++。 .NET的优点前面阐述了.NET的优点,但并没有说它会使开发人员的工作更易于完成。在本节中,我们将简要讨论.NET的改进特性。●面向对象的编程:.NET Framework和C#从一开始就完全是基于面向对象的。●优秀的设计:一个基类库,它是以一种非常直观的方式设计出来的。●语言的无关性:在.NET中,VB.NET、C#、J#和Managed C++等语言都可以编译为通用的中间语言(Intermediate Language)。这说明,语言可以用以前没有的方式交互操作。●对动态Web页面的支持:ASP具有很大的灵活性,但效率不是很高,这是因为它使用了解释性的脚本语言,且缺乏面向对象的设计,从而导致ASP代码比较凌乱。.NET使用一种新技术ASP.NET,它为Web页面提供了一种集成式的支持。使用ASP.NET,可以编译页面中的代码,这些代码还可以使用.NET高级语言来编写,例如C#、J#或VB.NET。●高效的数据访问:一组.NET组件,总称为ADO.NET,提供了对关系数据库和各种数据源的高效访问。这些组件也可以访问文件系统和目录。.NET内置了XML支持,可以处理从非Windows平台导入或导出的数据。●代码共享:.NET引入了程序集的概念,替代了传统的DLL,可以完美无暇地修补代码在应用程序之间的共享方式。程序集有解决版本冲突的正式系统,程序集的不同版本可以同时存在。 ●增强的安全性:每个程序集还可以包含内置的安全信息,这些信息可以准确地指出谁或哪种类型的用户或进程可以调用什么类的哪些方法。这样就可以非常准确地控制程序集的使用方式。●对安装没有任何影响:有两种类型的程序集,分别是共享程序集和私有程序集。共享程序集是可用于所有软件的公共库,私有程序集只用于某个软件。私有程序集功能完备,所以安装过程非常简单,没有注册表项,只需把相应的文件放在文件系统的相应文件夹中即可。●Web服务的支持:.NET集成了对开发Web服务的完全支持,用户可以开发出任何类型的应用程序。●Visual Studio .NET 2003:.NET附带了一个开发环境Visual Studio .NET,它可以很好地利用C++、C#、J#、VB.NET和ASP.NET进行代码编写。Visual Studio .NET集成了Visual Studio 6环境中各种语言专用的所有最佳功能。●C#:是使用.NET的一种面向对象的新语言。第1章将详细讨论.NET体系结构的优点。.NET Framework 1.1中的新增特性.NET Framework的第1版(1.0版)在2002年发布,赢得了许多人的喝彩。.NET Framework的最新版本1.1在2003年发布,它被认为是对该架构进行了较小的改进。即使是较小的改进,新版本仍有一些非常明显的变化和新增的内容,值得我们探讨一番。在对.NET Framework 1.1版本进行的所有改进中,Microsoft试图确保对使用1.0版本编写的代码改动尽可能少。即使做了这样的努力,但在新版本中仍有一些显著的变化。许多代码的改进是为了增强安全性。读者可以在Microsoft的GotDotNet Web站点(http://www.gotdotnet.com)上查看完整的改进列表。下面详细论述.NET Framework 1.1版本中的一些改进和Visual Studio .NET 2003(.NET Framework 1.1的开发环境)的新增特性。 可移动性在使用.NET Framework 1.0和Visual Studio .NET 2002时,要创建可移动应用程序,就必须下载Microsoft Mobile Internet Toolkit(MMIT)。而现在,有了.NET Framework 1.1和Visual Studio .NET 2003,就可以直接创建可移动应用程序,不需要下载其他工具包了。在使用Visual Studio .NET 2003创建新项目时,这是显而易见的。例如,在查看可以创建的C#项目类型列表时,会看到ASP.NET Mobile Web Application和Smart Device Application。ASP.NET Mobile Web Application项目类型可以用于建立基于Web的可移动应用程序。Smart Device Application项目类型可以创建用于Pocket PC或其他Windows CE设备的应用程序。为Windows CE设备建立的第三方客户应用程序利用的是Compact Framework,这是.NET Framework的删节版本。打开任何一种可移动项目类型,系统就会在Visual Studio .NET工具箱中列出一组可用的可移动服务器控件,然后用户就可以使用这些控件创建应用程序。 新的数据提供程序在新的架构中,另一个大的变化是ADO.NET。ADO.NET是访问和处理数据的.NET方式,现在它有两个新的数据提供程序,其中一个用于ODBC,另一个用于Oracle。在使用.NET Framework 1.0时,就可以使用ODBC数据提供程序,但它需要单独下载。另外,一旦下载,这个数据提供程序的命名空间就是Microsoft.Data.Odbc。而在.NET Framework 1.1中,ODBC数据提供程序是内置的,不需要单独下载。而且可以通过System.Data.Odbc命名空间来使用ODBC数据源,访问ODBC数据连接、数据适配器和数据读取器对象。另一个新的数据提供程序用于处理Oracle数据库。该数据库在企业中的应用非常广泛,缺乏Oracle数据提供程序常常是.NET进入企业的一大障碍。为了使用这个新的数据提供程序,需要在项目中引用System.Data.OracleClient命名空间。 新的语言:Visual J# 在安装Visual Studio .NET 2003时,注意该版本提供了一种新语言Visual J#,可用于建立.NET应用程序。在此版本之前,Visual Studio .NET 2002需要单独安装该语言。Visual J#简称为J#(读作J-Sharp),是Visual J++语言的新版本。它非常类似于Java语言,Java开发人员通过它将很容易迁移到.NET中。J#开发人员将使用.NET类库来代替Java运行 时库。在.NET平台上,J#开发人员将拥有与C#开发人员相同的能力。使用J#,也可以建立.NET类、Windows窗体应用程序、ASP.NET Web应用程序和XML Web服务。另外,还可以像使用其他.NET兼容语言那样,以跨语言的方式使用J#。例如,可以创建一个J#类,并在C#应用程序中使用这个J#类,或者可以创建一个C#类,并在J#应用程序中使用这个C#类。 与其他语言一样,在.NET Framework中也有用于J#的内置编译器。所有的编译器都位于C:/Windows/Microsoft .NET/Framework/v1.1.xxxx目录下。C#的编译器是csc.exe,VB.NET的编译器是vbc.exe,J#的编译器是vjc.exe。 并发执行并发执行side-by-side execution是指在同一个服务器上运行应用程序的多个版本,其中不同的应用程序版本使用不同的运行库版本。Microsoft一直都向开发人员承诺提供这个功能,但该功能总是很难可视化,因为只能使用Framework的一个版本。在发布了Framework的第2版.NET Framework 1.1后,就可以看到Microsoft提供的这个功能了。现在,可以创建.NET应用程序面向.NET Framework 1.1的新版本,同时还可以让面向.NET Framework 1.0的旧应用程序像以前那样继续运行。 支持Internet Protocol 6(IPv6)最近,许多Internet使用IP 4运行,IP4也称为IPv4。它提供了IP地址,例如255.255.255. 255。.NET Framework 1.1现在支持IPv6,IPv6是在1995年创建的,解决了IPv4所面临的许多问题。如果人们一直采用IPv4,将很快用尽可用的IP地址。.NET Framework 1.1通过System.Net命名空间支持IPv6,ASP.NET和XML Web服务也支持IPv6。Visual Studio .NET 2003的改进在升级.NET Framework时,还对Visual Studio .NET本身进行了升级。注意,在开始页面上有一些新图形,该页面上对象的组织方式也有所不同。另外,新IDE最重大的变化是,一旦安装,就不是简单地把Visual Studio .NET 2002升级为Visual Studio .NET 2003,而是安装了一个全新的IDE版本。如果机器上已经安装了Visual Studio .NET 2002,就会得到两个完全独立的VS.NET IDE。这样,如果要创建和使用面向.NET Framework 1.0的应用程序,就使用VS.NET 2002;如果要创建和使用面向.NET Framework 1.1的应用程序,就使用VS.NET 2003。还应注意,在打开用VS.NET 2002创建的项目时,系统会询问是否要把项目升级为VS.NET 2003项目,如果回答“是”,就会把项目升级为面向.NET Framework 1.1的应用程序。注意,这是一个不可逆的过程。除了这些较大的变化之外,在VS.NET 2003的IDE中,Intellisense的智能化程度更高,代码自动完成功能更强。本书将使用IDE的这个版本。 C#的优点C#在某种程度上可以看作是.NET面向Windows环境的一种编程语言。在过去的十几年里,Microsoft给Windows和 Windows API添加了许多功能,VB和C++也经历了许多变化。虽然VB和C++最终已成为非常强大的语言,但这两种语言也存在问题,因为它们保留了原来的一些内容。对于Visual Basic来说,它的主要优点是很容易理解,许多编程工作都很容易完成,基本上隐藏了Windows API和COM组件结构的内涵。其缺点是Visual Basic从来没有实现真正意义上的面向对象,所以大型应用程序很难分解和维护。另外,因为VB的语法继承于BASIC的早期版本(BASIC主要是为了让初学者更容易理解,而不是为了编写大型商业应用程序),所以不能真正成为结构化或面向对象的编程语言。另一方面,C++在ANSI C++语言定义中有其自己的根。它与ANSI不完全兼容,因为Microsoft是在ANSI定义标准化之前编写C++编译器的,但已经相当接近了。遗憾的是,这导致了两个问题。其一,ANSI C++是在十几年前的技术条件下开发的,因此不支持现在的概念(例如Unicode字符串和生成XML文档),某些古老的语法结构是为以前的编译器设计的(例如成员函数的声明和定义是分开的)。其二,Microsoft同时还试图把C++演变为一种用于在Windows上执行高性能任务的语言—— 在语言中避免添加大量Microsoft专用的关键字和各种库。其结果是在Windows中,该语言成为了一种非常杂乱的语言。让一个C++开发人员说说字符串有多少个定义方式就可以说明这一点:char*、LPTSTR、string、CString (MFC 版本)、CString (WTL 版本)、wchar_t*和 OLECHAR*等。现在进入.NET时代—— 一种全新的环境,它对这两种语言都进行了新的扩展。Microsoft给C++添加了许多Microsoft专用的关键字,并把VB演变为VB.NET,保留了一些基本的VB语法,但在设计上完全不同,从实际应用的角度来看,VB.NET是一种新语言。在这里,Microsoft决定给开发人员另一个选择—— 专门用于.NET、具有新起点的语言, 即Visual C# .NET。Microsoft在正式场合把C#描述为一种简单、现代、面向对象、类型非常安全、派生于C和C++的编程语言。大多数独立的评论员对其说法是“派生于C、 C++ 和Java”。这种描述在技术上是非常准确的,但没有涉及到该语言的真正优点。从语法上看,C#非常类似于C++和Java,许多关键字都是相同的,C#也使用类似于C++和Java的块结构,并用括号({})来标记代码块,用分号分隔各行语句。对C#代码的第一印象是它非常类似于C++或Java代码。但在这些表面上的类似性后面,C#学习起来要比C++容易得多,但比Java难一些。其设计与现代开发工具的适应性要比其他语言更高,它同时具有Visual Basic的易用性、高性能以及C++的低级内存访问性。C#包括以下一些特性:●完全支持类和面向对象编程,包括接口和继承、虚函数和运算符重载的处理。●定义完整、一致的基本类型集。●对自动生成XML文档说明的内置支持。●自动清理动态分配的内存。●可以用用户定义的特性来标记类或方法。这可以用于文档说明,对编译有一定的影响(例如,把方法标记为只在调试时编译)。●对.NET基类库的完全访问权,并易于访问Windows API。●可以使用指针和直接内存访问,但C#语言可以在没有它们的条件下访问内存。●以VB的风格支持属性和事件。●改变编译器选项,可以把程序编译为可执行文件或.NET组件库,该组件库可以用与ActiveX控件(COM组件)相同的方式由其他代码调用。●C#可以用于编写ASP.NET动态Web页面和XML Web服务。应该指出,对于上述大多数特性,VB.NET和Managed C++也具备。但C#从一开始就使用.NET,对.NET特性的支持不仅是完整的,而且提供了比其他语言更合适的语法。C#语言本身非常类似于Java,但其中有一些改进,因为Java并不是为应用于.NET环境而设计的。在结束这个主题前,还要指出C#的两个局限性。其一是该语言不适用于编写时间急迫或性能非常高的代码,例如一个要运行1000或1050次的循环,并在不需要这些循环时,立即清理它们所占用的资源。在这方面,C++可能仍是所有低级语言中的佼佼者。其二是C#缺乏性能极高的应用程序所需要的关键功能,包括保证在代码的特定地方运行的内联函数和析构函数。但这类应用程序非常少。 编写和运行C#代码需要的环境.NET运行在Windows 98、2000、XP和2003上,要使用.NET编写代码,需要安装.NETSDK,除非使用内置了.NET Framework 1.0和1.1的Windows Server 2003。除非要使用文本编辑器或其他第三方开发环境来编写C#代码,否则一般使用Visual Studio .NET 2003。运行托管代码不需要安装完整的SDK,但需要.NET运行库。需要把.NET运行库分布到还没有安装它的客户机上。 本书的内容在本书中,首先在第1章介绍.NET的整体结构体系,给出编写托管代码需要的背景知识,此后本书分几部分介绍C#语言及其在各个领域中的应用。第一部分(第1~11章)—— C#语言本部分给出C#语言的背景知识。这部分没有指定任何语言,但假定读者是有经验的编程人员。首先介绍 C#基本语法和数据类型,再介绍C#的面向对象特性,之后是C#中的一些高级 论题。第二部分(第12~18章)—— .NET环境在本部分中,介绍在.NET环境中的编程规则。特别是Visual Studio .NET、安全性、.NET应用程序的线程部署,以及把库生成为程序集的方式。第三部分(第19~20章)—— Windows窗体本部分讨论传统Windows应用程序的创建,在.NET中这种应用程序称为Windows窗体。Windows窗体是应用程序的客户版本,使用.NET创建这些类型的应用程序是实现该任务的一种快捷、简单的方式。除了介绍Windows窗体之外,我们还将论述GDI+,这种技术可用于创建包含高级图形的应用程序。第四部分(第21~24章)—— 数据这部分介绍如何使用ADO.NET访问数据库,以及目录和Active Directory交互。我们还详细说明.NET对XML的支持,以及对Windows操作系统的支持。第五部分(第25~27章)—— Web编程这一部分介绍如何编写在网站上运行的组件,如何编写网页。其中包括ASP.NET的使用和Web服务程序的编写。第六部分(第28~29章)—— 交互操作COM的向后兼容性是.NET的一个重要组成部分,COM+负责事务处理、对象池和消息的排队。本部分将介绍.NET对处理COM和COM+的支持,并讨论如何编写与这些技术交互的C#代码。第七部分(第30~32章)—— Windows基本服务本部分是本书主要内容的总结,介绍如何访问文件和注册表,如何通过应用程序访问Internet,以及如何使用Windows服务。第八部分—— 附录(本书仅提供内容下载地址)本部分包含几个附录,详细介绍了面向对象的编程规则及C#编程语言专用的信息。这些附录在本书中并未给出,您可以通过本书提及的Web站点http://www.wrox.com获得其PDF版本。 如何下载本书的示例代码在您学习本书的示例时,可以选择手工输入所有的代码,也可以使用与本书有关的源代码文件。本书所有的源代码都可以从http://www.wrox.com/上下载。在您登录到这个站点时,只需使用Search工具或使用书名列表就可以找到本书。接着单击本书信息页面上的Download Code链接,就可以获得所有的源代码。 提示:许多图书的书名都很相似,所以通过ISBN查找本书是最简单的,本书的ISBN是0-7645-5759-9。 下载了代码后,就可以使用自己喜欢的解压缩工具对它进行解压缩。另外,也可以进入Wrox代码的主下载页面http://www.wrox.com/dynamic/books/download.aspx,查看本书所用的代码和其他Wrox图书。 勘误表尽管我们已经尽了各种努力来保证本书不出现错误,但是错误总是在所难免,如果您在本书中找到了错误,例如拼写错误或代码错误,请告诉我们,我们将不胜感激。通过勘误表,可以让其他读者避免受挫,当然,这还有助于提供更高质量的信息。要在网站上找到本书的勘误表,可以登录http://www.wrox.com,通过Search工具或书名列表查找本书 ,然后在本书的信息页面上,单击Book Errata链接。在这个页面上,可以查看已经提交并通过编辑检查的所有勘误。包含每本书的错误勘误表链接的完整图书列表可通过http://www.wrox.com/misc-pages/booklist.shtml获得。 如果没有在Book Errata页面上找到自己发现的错误,可以进入http://www.wrox.com/ contact/techsupport.shtml,填写其上的表单,将您发现的错误发送给我们。我们会检查您的信息,如果正确,就把它上传到该书的勘误表页面上,或在本书的后续版本中采用。 p2p.wrox.comP2P邮件列表是为作者和读者之间的讨论而建立的。读者可以在p2p.wrox.com上加入P2P论坛。该论坛是一个基于Web的系统,用于传送与Wrox图书相关的信息和相关技术,与其他读者和技术用户交流。该论坛提供了订阅功能,当论坛上有新贴子时,会给您发送您选择的主题。Wrox作者、编辑和其他业界专家和读者都会在这个论坛上进行讨论。在http://p2p.wrox.com上有许多不同的论坛,帮助读者阅读本书,在读者开发自己的应用程序时,也可以从这个论坛中获益。要加入这个论坛,需执行下面的步骤:(1) 进入p2p.wrox.com,单击Register链接。(2) 阅读其内容,单击Agree按钮。(3) 提供加入论坛所需的信息及愿意提供的可选信息,单击Submit按钮。然后就可以收到一封电子邮件,其中的信息描述了如何验证账户,完成加入过程。 提示:不加入P2P也可以阅读论坛上的信息,但只有加入论坛后,才能发送自己的信息。 加入论坛后,就可以发送新信息,回应其他用户的贴子。可以随时在Web上阅读信息。如果希望某个论坛给自己发送新信息,可以在论坛列表中单击该论坛对应的Subscribe to this Forum图标。对于如何使用Wrox P2P的更多信息,可阅读P2P FAQ,了解论坛软件的工作原理,以及许多针对P2P和Wrox图书的常见问题解答。要阅读FAQ,可以单击任意P2P页面上的FAQ链接。
作者简介
  李敏波,2001年获清华大学工学博士,随后在新加坡国立大学从事协同产品设计与门户的博士后研究。2002年至2004年在金蝶软件(中国)公司中央研究院担任高级研究员。现任复旦大学软件学院零售与分销管理系统研究中心的副主任,从事教学与科研工作。
目录
第1章  .NET体系结构    1
1.1  C#与.NET的关系    1
1.2  公共语言运行库    1
1.3  中间语言    4
1.3.1  面向对象和接口的支持    5
1.3.2  值类型和引用类型    6
1.3.3  强数据类型    6
1.3.4  通过异常处理错误    12
1.3.5  特性的使用    12
1.4  程序集    12
1.4.1  私有程序集    13
1.4.2  共享程序集    14
1.4.3  反射    14
1.5  .NET Framework类    14
1.6  用C#创建.NET应用程序    16
1.6.1  创建ASP.NET应用程序    16
1.6.2  创建Windows窗体    18
1.6.3  Windows服务    18
1.7  C#在.NET企业体系结构中的作用    18
1.8  小结    20
第2章  C#基础    21
2.1  引言    21
2.2  第一个C#程序    22
2.2.1  代码    22
2.2.2  编译并运行程序    22
2.2.3  详细介绍    23
2.3  变量    25
2.3.1  变量的初始化    26
2.3.2  变量的作用域    26
2.3.3  常量    29
2.4  预定义数据类型    30
2.4.1  值类型和引用类型    30
2.4.2  CTS类型    31
2.4.3  预定义的值类型    32
2.4.4  预定义的引用类型    35
2.5  流控制    37
2.5.1  条件语句    37
2.5.2  循环    41
2.5.3  跳转语句    44
2.6  枚举    45
2.7  数组    47
2.8  命名空间    48
2.8.1  using语句    49
2.8.2  命名空间的别名    50
2.9  Main()方法    51
2.9.1  多个Main()方法    51
2.9.2  给Main()方法传送参数    52
2.10  有关编译C#文件的更多内容    53
2.11  控制台I/O    55
2.12  使用注释    57
2.12.1  源文件中的内部注释    57
2.12.2  XML文档说明    57
2.13  C#预处理器指令    59
2.13.1  #define和 #undef    60
2.13.2  #if, #elif, #else和 #endif    60
2.13.3  #warning和 # error    61
2.13.4  #region和#endregion    62
2.13.5  #line    62
2.14  C#编程规则    62
2.14.1  用于标识符的规则    63
2.14.2  用法约定    64
2.15  小结    69
第3章  对象和类型    70
3.1  类和结构    70
3.2  类成员    71
3.2.1  数据成员    71
3.2.2  函数成员    72
3.2.3  只读字段    86
3.3  结构    87
3.3.1  结构是值类型    88
3.3.2  结构和继承    89
3.3.3  结构的构造函数    89
3.4  Object类    90
3.4.1  System.Object方法    90
3.4.2  ToString()方法    91
3.5  小结    93
第4章  继承    94
4.1  继承的类型    94
4.1.1  实现继承和接口继承    94
4.1.2  多重继承    95
4.1.3  结构和类    95
4.2  实现的继承    95
4.2.1  虚方法    96
4.2.2  隐藏方法    97
4.2.3  调用函数的基础版本    98
4.2.4  抽象类和抽象函数    99
4.2.5  密封类和密封方法    100
4.2.6  派生类的构造函数    101
4.3  修饰符    105
4.3.1  可见性修饰符    105
4.3.2  其他修饰符    106
4.4  接口    107
4.4.1  定义和实现接口    108
4.4.2  派生的接口    112
4.5  小结    114
第5章  运算符和类型强制转换    115
5.1  运算符    115
5.1.1  运算符的简化操作    116
5.1.2  三元运算符    117
5.1.3  checked和 unchecked运算符    118
5.1.4  is运算符    119
5.1.5  as运算符    119
5.1.6  sizeof运算符    119
5.1.7  typeof运算符    119
5.1.8  运算符的优先级    120
5.2  类型的安全性    120
5.2.1  类型转换    121
5.2.2  装箱和取消装箱    124
5.3  对象的相等比较    125
5.3.1  引用类型的相等比较    125
5.3.2  ReferenceEquals()方法    125
5.3.3  虚拟的Equals()方法    125
5.3.4  静态的Equals()方法    125
5.3.5  比较运算符==    126
5.3.6  值类型的相等比较    126
5.4  运算符重载    126
5.4.1  运算符的工作方式    127
5.4.2  运算符重载的示例:Vector结构    128
5.5  用户定义的数据类型转换    135
5.5.1  执行用户定义的类型转换    137
5.5.2  多重数据类型转换    143
5.6  小结    147
第6章  委托和事件    148
6.1  委托    148
6.1.1  在C#中使用委托    149
6.1.2  简单的委托示例    153
6.1.3  BubbleSorter示例    154
6.1.4  多播委托    157
6.2  事件    160
6.2.1  从客户的角度讨论事件    160
6.2.2  生成事件    162
6.3  小结    166
第7章  内存管理和指针    167
7.1  后台内存管理    167
7.1.1  值数据类型    167
7.1.2  引用数据类型    169
7.1.3  垃圾收集    171
7.2  释放未托管的资源    172
7.2.1  析构函数    172
7.2.2  IDisposable接口    173
7.2.3  实现IDisposable接口和析构函数    175
7.3  不安全的代码    176
7.3.1  指针    176
7.3.2  使用指针优化性能    191
7.4  小结    194
第8章  字符串和正则表达式    195
8.1  System.String类    195
8.1.1  创建字符串    196
8.1.2  格式化字符串    200
8.2  正则表达式    206
8.2.1  正则表达式概述    206
8.2.2  RegularExpressionsPlayaround示例    207
8.2.3  显示结果    209
8.2.4  匹配、组合和捕获    211
8.3  小结    212
第9章  集合    213
9.1  对象组    213
9.1.1  数组列表    213
9.1.2  集合    215
9.1.3  字典    219
9.2  小结    228
第10章  反射    229
10.1  定制特性    229
10.1.1  编写定制特性    230
10.1.2  定制特性示例WhatsNewAttributes    233
10.2  反射    237
10.2.1  System.Type类    237
10.2.2  TypeView示例    239
10.2.3  Assembly类    241
10.2.4  完成WhatsNewAttributes示例    243
10.3  小结    247
第11章  错误和异常    248
11.1  错误和异常处理    248
11.1.1  异常类    248
11.1.2  捕获异常    250
11.1.3  用户定义的异常类    259
11.2  小结    267
第12章  Visual Studio .NET    268
12.1  使用Visual Studio .NET 2003    268
12.1.1  创建项目    271
12.1.2  解决方案和项目    276
12.1.3  Windows应用程序代码    279
12.1.4  读取Visual Studio 6项目    279
12.1.5  项目的浏览和编码    280
12.1.6  生成项目    289
12.1.7  调试    293
12.2  其他.NET工具    295
12.2.1  ASP.NET Web Matrix Project    295
12.2.2  WinCV    296
12.3  小结    297
第13章  程序集    298
13.1  程序集的含义    298
13.1.1  DLL-Hell的解决方案    299
13.1.2  程序集的特性    299
13.1.3  应用程序域和程序集    300
13.2  程序集的结构    303
13.2.1  程序集的清单    303
13.2.2  命名空间、程序集和组件    304
13.2.3  私有程序集和共享程序集    304
13.2.4  查看程序集    304
13.2.5  构建程序集    305
13.3  跨语言支持    309
13.3.1  CTS和CLS    310
13.3.2  语言无关性    311
13.3.3  CLS要求    320
13.4  全局程序集缓存    321
13.4.1  本机图像生成器    322
13.4.2  全局程序集缓存查看器    322
13.4.3  全局程序集缓存工具(gacutil.exe)    324
13.5  创建共享程序集    324
13.5.1  共享程序集名    324
13.5.2  创建共享程序集    326
13.6  配置    331
13.6.1  配置类别    331
13.6.2  版本问题    332
13.6.3  配置目录    341
13.7  小结    343
第14章  .NET的安全性    344
14.1  代码访问的安全性    344
14.1.1  代码组    345
14.1.2  代码访问权限和权限集    351
14.1.3  策略的级别:Machine、User和Enterprise    355
14.2  对Framework中安全性的支持    357
14.2.1  要求权限    358
14.2.2  请求权限    359
14.2.3  隐式的权限    361
14.2.4  拒绝权限    362
14.2.5  断言权限    363
14.2.6  创建代码访问权限    365
14.2.7  声明的安全性    365
14.3  基于角色的安全性    366
14.3.1  Principal    366
14.3.2  Windows Principal    367
14.3.3  角色    368
14.3.4  声明基于角色的安全性    369
14.4  安全策略的管理    370
14.4.1  安全配置文件    370
14.4.2  代码组和权限的管理    373
14.4.3  安全性的启用和禁用    374
14.4.4  重置安全策略    374
14.4.5  代码组的创建    374
14.4.6  代码组的删除    375
14.4.7  代码组权限的更改    375
14.4.8  权限集的创建和应用    376
14.4.9  使用强名称发布代码    378
14.4.10  使用证书发布代码    381
14.4.11  区域的管理    386
14.5  小结    387
第15章  线程    389
15.1  线程    389
15.2  多线程应用程序    390
15.3  线程的处理    391
15.4  ThreadPlayaround示例    393
15.5  线程的优先级    397
15.6  同步    398
15.6.1  同步的含义    398
15.6.2  同步问题    399
15.7  小结    402
第16章  使用.NET Remoting的分布式应用程序    403
16.1  .NET Remoting的含义    404
16.1.1  应用程序类型和协议    404
16.1.2  CLR Object Remoting    405
16.2  .NET Remoting概述    405
16.3  环境    407
16.3.1  激活    408
16.3.2  特性和属性    408
16.3.3  环境之间的通信    409
16.4  远程对象、客户机和服务器    409
16.4.1  远程对象    409
16.4.2  简单的服务器    410
16.4.3  简单的客户机    411
16.5  .NET Remoting体系结构    413
16.5.1  信道    413
16.5.2  格式标识符    416
16.5.3  ChannelServices和RemotingConfiguration    417
16.5.4  对象的激活    418
16.5.5  消息接收器    422
16.5.6  在远程方法中传递对象    423
16.5.7  生存期管理    427
16.6  .NET Remoting的其他特性    430
16.6.1  配置文件    430
16.6.2  驻留应用程序    440
16.6.3  类、接口和Soapsuds    441
16.6.4  异步远程调用    443
16.6.5  远程调用和事件    445
16.6.6  调用环境    451
16.7  小结    453
第17章  本地化    454
17.1  System.Globalization命名空间    454
17.1.1  Unicode问题    454
17.1.2  文化和区域    455
17.1.3  使用文化    459
17.1.4  排序    464
17.2  资源    465
17.2.1  创建资源文件    466
17.2.2  ResGen    466
17.2.3  ResourceWriter    466
17.2.4  使用资源文件    467
17.2.5  System.Resources命名空间    470
17.3  使用Visual Studio .NET的本地化示例    470
17.3.1  外包翻译    476
17.3.2  编程修改文化    476
17.3.3  使用二进制资源文件    478
17.3.4  使用XML资源文件    479
17.3.5  资源的自动回退    480
17.4  ASP.NET应用程序的国际化和本地化    481
17.5  定制的资源读取器    482
17.5.1  创建DatabaseResourceReader类    483
17.5.2  创建DatabaseResourceSet类    484
17.5.3  创建DatabaseResourceManager类    485
17.5.4  DatabaseResourceReader的客户应用程序    486
17.6  小结    486
第18章  部署    487
18.1  部署的设计    487
18.2  部署选项    487
18.2.1  xcopy实用工具    487
18.2.2  复制项目    488
18.2.3  部署项目    488
18.3  部署的要求    488
18.4  简单的部署    489
18.4.1  xcopy部署    489
18.4.2  xcopy部置和Web应用程序    490
18.4.3  复制项目    491
18.5  Installer项目    492
18.5.1  Windows Installer    493
18.5.2  创建安装程序    493
18.5.3  高级选项    502
18.6  小结    508
第19章  Windows窗体    509
19.1  创建Windows窗体应用程序    509
19.2  Control类    515
19.2.1  大小和位置    516
19.2.2  外观    516
19.2.3  用户交互操作    516
19.2.4  Windows功能    517
19.2.5  杂项功能    518
19.2.6  类层次结构    518
19.3  标准控件和组件    519
19.3.1  Button控件    520
19.3.2  CheckBox控件    521
19.3.3  ComboBox控件与ListBox控件    521
19.3.4  DateTimePicker控件    522
19.3.5  ErrorProvider组件    522
19.3.6  HelpProvider组件    524
19.3.7  ImageList组件    524
19.3.8  Label控件    524
19.3.9  ListView控件    525
19.3.10  Panel控件    527
19.3.11  PictureBox控件    527
19.3.12  ProgressBar控件    527
19.3.13  RadioButton控件    528
19.3.14  TextBox控件与RichTextBox控件    528
19.3.15  Splitter控件    529
19.3.16  StatusBar控件    529
19.3.17  TabControl控件和TabPages控件    530
19.3.18  Menu控件    530
19.3.19  ToolBar控件    532
19.4  窗体    534
19.4.1  Form类    534
19.4.2  多文档界面    542
19.4.3  定制控件    545
19.5  小结    557
第20章  使用GDI+绘图    558
20.1  理解绘图规则    558
20.1.1  GDI和GDI+    558
20.1.2  绘制图形    560
20.1.3  使用OnPaint()绘制图形    563
20.1.4  使用剪切区域    564
20.2  测量坐标和区域    565
20.2.1  Point和PointF结构    566
20.2.2  Size和SizeF结构    567
20.2.3  Rectangle和RectangleF结构    568
20.2.4  Region    569
20.3  调试须知    570
20.4  绘制可滚动的窗口    571
20.5  颜色    577
20.5.1  红绿蓝(RGB)值    577
20.5.2  命名的颜色    578
20.5.3  图形显示模式和安全的调色板    578
20.5.4  安全调色板    579
20.6  画笔和钢笔    579
20.6.1  画笔    580
20.6.2  钢笔    580
20.7  绘制图形和线条    581
20.8  显示图像    583
20.9  绘制文本    586
20.10  字体和字体系列    588
20.11  示例:枚举字体系列    590
20.12  编辑文本文档:CapsEditor示例    592
20.12.1  Invalidate()方法    596
20.12.2  计算项和文档的大小    597
20.12.3  OnPaint()    599
20.12.4  坐标转换    600
20.12.5  响应用户的输入    602
20.13  打印    605
20.14  小结    610
第21章  .NET数据访问    612
21.1  ADO.NET概述    612
21.1.1  命名空间    613
21.1.2  共享类    613
21.1.3  数据库特定的类    613
21.2  使用数据库连接    614
21.2.1  高效地使用连接    615
21.2.2  事务处理    618
21.3  命令    619
21.3.1  执行命令    620
21.3.2  调用存储过程    624
21.4  快速数据访问:数据读取器    627
21.5  管理数据和关系:DataSet类    630
21.5.1  数据表    630
21.5.2  数据列    631
21.5.3  数据关系    636
21.5.4  数据约束    638
21.6  XML模式    640
21.7  填充数据集    647
21.7.1  用数据适配器来填充 DataSet    647
21.7.2  从XML中给数据集填充数据    649
21.8  保存对数据集的修改    649
21.8.1  通过数据适配器进行更新    649
21.8.2  写入XML输出结果    652
21.9  使用ADO.NET    654
21.9.1  分层开发    654
21.9.2  SQL Server的键生成    655
21.9.3  命名约定    657
21.10  小结    658
第22章  查看.NET数据    660
22.1  DataGrid控件    660
22.1.1  显示列表数据    660
22.1.2  数据源    662
22.1.3  DataGrid类的层次结构    669
22.2  数据绑定    673
22.2.1  简单的绑定    673
22.2.2  数据绑定对象    674
22.3  Visual Studio .NET和数据访问    679
22.3.1  创建一个连接    679
22.3.2  选择数据    681
22.3.3  生成DataSet    683
22.3.4  更新数据源    684
22.3.5  构建模式    686
22.3.6  其他常见的要求    691
22.4  小结    700
第23章  处理XML    701
23.1  .NET支持的XML标准    701
23.2  System.Xml命名空间    702
23.3  在.NET中使用MSXML    703
23.4  使用System.Xml类    705
23.5  读写流格式的XML    706
23.5.1  使用 XmlTextReader类    706
23.5.2  使用XmlValidatingReader类    710
23.5.3  使用XmlTextWriter类    713
23.6  在.NET中使用DOM    714
23.7  在NET中使用XPath和XSLT    721
23.7.1  System.Xml.XPath命名空间    721
23.7.2  System.Xml.Xsl命名空间    725
23.8  XML和ADO.NET    730
23.8.1  将ADO.NET数据转换为XML文档    730
23.8.2  把XML文档转换为 ADO.NET数据    739
23.8.3  读写DiffGram    741
23.9  在XML中串行化对象    744
23.10  小结    756
第24章  使用Active Directory    757
24.1  Active Directory的体系结构    757
24.1.1  特性    758
24.1.2  Active Directory的概念    758
24.1.3  Active Directory数据的特性    762
24.1.4  模式    762
24.2  Active Directory的管理工具    763
24.2.1  Active Directory Users and Computers工具    764
24.2.2  ADSI Edit工具    765
24.3  Active Directory Service Interfaces    766
24.4  Active Directory编程    766
24.4.1  System.DirectoryServices命名空间中的类    767
24.4.2  绑定    767
24.4.3  获取目录项    771
24.4.4  对象集合    773
24.4.5  缓存    774
24.4.6  创建新对象    774
24.4.7  更新目录项    775
24.4.8  访问内部的ADSI对象    776
24.4.9  在Active Directory中搜索    777
24.5  搜索用户对象    781
24.5.1  用户界面    781
24.5.2  获取模式命名环境    782
24.5.3  获取User类的属性名    783
24.5.4  搜索用户对象    784
24.6  小结    786
第25章  ASP.NET页面    787
25.1  ASP.NET概述    787
25.2  ASP.NET Web窗体    788
25.3  ADO.NET和数据绑定    805
25.3.1  更新会议登记应用程序    805
25.3.2  数据绑定的更多内容    813
25.4  应用程序配置    819
25.5  小结    820
第26章  Web服务    821
26.1  SOAP    821
26.2  WSDL    823
26.3  Web服务    824
26.3.1  创建Web服务    824
26.3.2  使用Web服务    828
26.4  扩充会议登记示例    830
26.4.1  会议登记 Web服务    830
26.4.2  会议登记客户程序    834
26.5  使用SOAP标题交换数据    836
26.6  小结    841
第27章  用户控件和定制控件    842
27.1  用户控件    842
27.2  定制控件    849
27.2.1  定制控件的项目配置    850
27.2.2  基本的定制控件    853
27.2.3  创建合成的定制控件    858
27.3  测验民意的投票控件    860
27.3.1  Candidate 控件    862
27.3.2  StrawPoll控件构建器    864
27.3.3  测试民意的投票类型    865
27.3.4  测试民意的投票控件    865
27.4  小结    872
第28章  COM的互操作性    873
28.1  .NET和COM    873
28.1.1  元数据    874
28.1.2  释放内存    874
28.1.3  接口    874
28.1.4  方法绑定    876
28.1.5  数据类型    876
28.1.6  注册    876
28.1.7  线程    876
28.1.8  错误处理    878
28.1.9  事件处理    878
28.2  编组    879
28.3  在.NET客户程序中使用COM组件    879
28.3.1  创建COM组件    880
28.3.2  创建Runtime Callable Wrapper    884
28.3.3  线程问题    886
28.3.4  添加连接点    886
28.3.5  在Windows窗体中使用ActiveX控件    888
28.3.6  在ASP.NET中使用COM对象    891
28.4  在COM客户程序中使用.NET组件    892
28.4.1  COM Callable Wrapper    892
28.4.2  创建.NET组件    892
28.4.3  创建类型库    893
28.4.4  COM互操作特性    896
28.4.5  COM注册    899
28.4.6  创建COM客户程序    900
28.4.7  添加连接点    901
28.4.8  用sink对象创建客户    902
28.4.9  在Internet Explorer中运行Windows窗体控件    903
28.5  小结    904
第29章  Enterprise Services    905
29.1  概述    905
29.1.1  Enterprise Services简史    905
29.1.2  使用Enterprise Services的场合    905
29.1.3  环境    906
29.1.4  自动的事务处理    906
29.1.5  分布式事务处理    907
29.1.6  对象池    907
29.1.7  基于角色的安全性    907
29.1.8  排队的组件    907
29.1.9  松散藕合的事件    907
29.2  创建简单的COM+应用程序    908
29.2.1  类ServicedComponent    908
29.2.2  应用程序属性    908
29.2.3  创建组件    909
29.3  部署    910
29.3.1  自动部署    910
29.3.2  手工部署    910
29.4  组件服务管理工具    911
29.5  客户应用程序    913
29.6  事务处理    913
29.6.1  ACID属性    914
29.6.2  事务处理的属性    914
29.6.3  事务处理的结果    915
29.6.4  示例应用程序    915
29.7  小结    926
第30章  文件和注册表操作    927
30.1  管理文件系统    927
30.1.1  表示文件和文件夹的.NET类    928
30.1.2  Path类    930
30.1.3  示例:文件浏览器    931
30.2  移动、复制和删除文件    936
30.3  读写文件    941
30.3.1  流    941
30.3.2  读写二进制文件    942
30.3.3  读写文本文件    948
30.4  读写注册表    954
30.4.1  注册表    954
30.4.2  .NET注册表类    956
30.4.3  SelfPlacingWindow示例    958
30.5  小结    964
第31章  访问Internet    965
31.1  WebClient类    965
31.1.1  下载文件    966
31.1.2  基本的Web客户示例    966
31.1.3  上传文件    967
31.2  WebRequest类和WebResponse类    968
31.3  把输出结果显示为HTML页面    971
31.4  实用工具类    974
31.4.1  URI    974
31.4.2  IP地址和DNS名称    976
31.5  较低层的协议    978
31.6  小结    985
第32章  Windows服务    986
32.1  Windows服务    986
32.2  Windows服务的体系结构    987
32.2.1  服务程序    987
32.2.2  服务控制程序    989
32.2.3  服务配置程序    989
32.3  System.ServiceProcess命名空间    989
32.4  创建Windows服务    989
32.4.1  使用套接字的类库    990
32.4.2  TcpClient示例    994
32.4.3  Windows服务项目    996
32.4.4  线程和服务    1001
32.4.5  服务的安装    1001
32.4.6  安装程序    1001
32.5  服务的监视和控制    1006
32.5.1  MMC计算机管理    1006
32.5.2  net.exe    1007
32.5.3  sc.exe    1008
32.5.4  Visual Studio .NET Server Explorer    1009
32.5.5  ServiceController类    1009
32.6  故障排除    1015
32.6.1  交互式服务    1015
32.6.2  事件日志    1016
32.6.3  性能监视    1022
32.7  电源事件    1027
32.8  小结    1027
猜您喜欢

读书导航