600 likes | 715 Views
第六章 .NET 框架. 本章学习目标: 认识 .NET 框架的基本知识,通过 .NET 框架的 System 命名空间及其通用语言运行环境获取计算机系统当前基本信息,监视文件系统变化,了解系统注册表操作,编程实现文本文件的读写、复制和删除等基本操作,通过在编程过程中使用哈希表来认识 .NET 集合,通过编程认识进行 XML 文档编辑的方法。. 本章学习要点: 掌握 .NET Framework 的概念、实现目标和主要组成部分 通过 System 命名空间的系统服务类获取系统信息的一般方法 掌握文件类型和文本文件的读写、复制、删除等基本操作
E N D
第六章 .NET框架 本章学习目标: 认识.NET框架的基本知识,通过.NET框架的System命名空间及其通用语言运行环境获取计算机系统当前基本信息,监视文件系统变化,了解系统注册表操作,编程实现文本文件的读写、复制和删除等基本操作,通过在编程过程中使用哈希表来认识.NET集合,通过编程认识进行XML文档编辑的方法。
本章学习要点: 掌握.NET Framework的概念、实现目标和主要组成部分 通过System 命名空间的系统服务类获取系统信息的一般方法 掌握文件类型和文本文件的读写、复制、删除等基本操作 学习通过文件系统监视器控件监视文件系统的变化 学习通过Microsoft.Win32命名空间对操作系统注册表进行操作。 通过哈希表设计具有XML文件支持功能的实用编辑程序
6.1 .NET 框架概念 .NET Framework 是支持生成和运行下一代应用程序和XML Web services的内部Windows组件。.NET Framework旨在实现下列目标: (1)一致的面向对象的编程环境。 (2)将软件部署和版本控制冲突最小化的代码执行环境。 (3)可提高代码(包括由未知或不完全受信任的第三方创建的代码)执行安全性的代码执行环境。 (4)可消除脚本环境或解释环境的性能问题的代码执行环境。 (5)使开发人员的经验在面对类型大不相同的应用程序时保持一致。 (6)按照工业标准生成所有通信,以确保基于.NET Framework的代码可与任何其他代码集成。
.NET Framework两个主要组件:公共语言运行库和.NET Framework类库。公共语言运行库是.NET Framework的基础。可以将运行库看作一个在执行时管理代码的代理,它提供内存管理、线程管理和远程处理等核心服务,并且还强制实施严格的类型安全以及可提高安全性和可靠性的其他形式的代码准确性。
图6.1公共语言运行库与其他部分的关系 公共语言运行库和类库与应用程序之间以及与整个系统之间的关系如下图所示。
图6.2 .NET框架主要组成 各组成部分之间的关系
6.2 公共语言运行库 公共语言运行库(CLR)的功能是通过编译器和工具公开,编写利用此托管执行环境的代码。使用基于公共语言运行库的语言编译器开发的代码称为托管代码;托管代码具有许多优点,例如:跨语言集成、跨语言异常处理、增强的安全性、版本控制和部署支持、简化的组件交互模型、调试和分析服务等。
图6.3 .NET框架支持多种程序设计语言 公共语言规范是公共语言运行库(CLR)的一部分。它们之间的关系如下图所示。
图 6.4从源程序转变成可执行代码过程 中间语言代码编译成可以执行的机器代码整个过程如图6.4所示。
公共语言运行库的一些优点: (1)性能得到了改进。 (2)能够轻松使用其他语言开发的组件。 (3)类库提供的可扩展类型。 (4)新的语言功能,如面向对象的编程的继承、接口和重载;允许创建多线程的可缩放应用程序的显式自由线程处理支持;结构化异常处理和自定义属性支持。
.NET Framework包括的类执行下列功能: (1)表示基础数据类型和异常。 (2)封装数据结构。 (3)执行I/O。 (4)访问关于加载类型的信息。 (5)调用.NET框架安全检查。 (6)提供数据访问、多客户端GUI和服务器控制的客户端GUI。
6.3 System命名空间 6.3.1命名空间 命名空间是组织类的一种机制。命名空间不仅组织程序,而且组织程序元素,显示给其他程序元素的方式。
图6.5都包含ListBox对象的两命名空间层次结构 下图说明了两个命名空间层次结构,它们都包含名为ListBox的对象。
命名空间的使用方法主要有两种: 1)直接使用 在程序中,任何一个命名空间均可以在代码中直接使用。 比如在程序代码中直接使用.NET的命名空间System: System.Console.WriteLine ("北京欢迎你") 表示System命名空间的控制台类Console的WriteLine方法将指定的数据写入标准输出流。
2)通过Imports语句引用命名空间 格式:Imports<NameSpace> ,把NameSpace指定的命名空间引入到当前应用程序中。例如:Imports System.Windows.Forms 表示引入名为System.Windows.Forms的命名空间,它是Windows窗体控件所在的命名空间,使我们在程序的后继代码中可以直接写出windows命名空间中的类。
(2)创建命名空间 使用VB.NET开发程序时,不仅能使用系统已有的命名空间,还可以通过NameSpace语句创建命名空间,格式如下: Namespace Training Public Class Teacher … End Class Public Class Student … End Class End Namespace
6.3.2 System命名空间 System命名空间包含用于定义常用值和引用数据类型、事件和事件处理程序、接口、属性和处理异常的基础类和基类。
6.3.3运用命名空间创建新控件 在实际编程时,如果想在编写某个程序的时候使用目前没有的功能更强的控件,就需要自己去创建。我们可以仿照例6.1中提供的方法来创建并使用新控件,效果如图6.6至6.8。
图6.7文字的编辑设置 图6.6 在MDI窗体中创建菜单 图6.8打印预览
6.4用系统服务类获取系统信息 System命名空间包含许多系统服务类,用这些系统服务类可以获得系统信息和管理应用程序运行的环境和状态。 主要利用的类是System.Environment,它提供有关当前环境和平台的信息以及操作它们的方法。
图6.9显示系统信息小程序 可以按例6.2方法开发一个显示系统信息的小应用程序,程序能显示一些基本信息。这些信息System命名空间中的类来获取,效果见图6.9 。
6.5 文件读写操作 传统的VB文件访问模式 传统VB提供了3种文件访问模式: • 顺序访问模式 • 随机访问模式 • 二进制访问模式。
.NET的文件系统操作 在.NET Framework 的System.IO命名空间包含了提供操作文件和目录的基本功能的类。 IO 命名空间包含 File 和 Directory 类,它们提供操作文件和目录的 功能。因为这些对象的方法是静态或共享成员,所以可以直接使用它们,而无需先创建类的实例。 FileInfo 和 DirectoryInfo 类与上面这两个类相关联,并将为 My 功能的用户所熟悉。若要使用这些类,您必须通过在受影响代码的开头处包含 Imports 语句来完全限定其名称或者导入适当的命名空间。
System.IO命名空间提供了用于处理文件和流的类与类方法。包括:System.IO命名空间提供了用于处理文件和流的类与类方法。包括: System.IO命名空间
1 1 1 1 n-1 结束标志 N字节文件的VB.NET视图 流的基本概念 VB.NET将文件看成是顺序的字节流,每个文件以特定的结束标识符标识结尾。如图所示: 流是字节序列的抽象概念,文件可以看成是存储在磁盘上的一系列二进制字节信息,VB.NET用流对其进行输入、输出操作, 例如:读取文件信息、向文件写入信息。VB.NET的System.IO命名空间提供相关的类,通过这些类或派生类的方法,可以进行文件的读写操作。
VB.NET的流 VB.NET提供Stream 类(System.IO成员),是所有流的基类。这些派生类包括: ⑴文件流FileStream: 用与读写文件能自动缓存(管理内存缓冲区)数据 ⑵缓冲区流BufferedStream:可以面向另一个流进行读取,减少对操作系统的调用次数,提高性能。 ⑶内存流:用于内存的读写访问。
File Stream FileStream TextReader StreamReader StringReader TextWriter StreamWriter StringWriter 应用File类进行文件操作 File类提供各种文件操作,如:创建、删除、移动、复制、打开等静态方法。能够协助创建文件流FileStream对象。
文件的基本概念 ⑴文件属性: 只读、隐藏、归档 ⑵访问方式: 读、读写、写 ⑶访问权限: 读、写、追加数据等 ⑷共享权限: 文件共享、文件不共享
文件常用方法 Copy、Delete、Move、Exists、Open方法 注意:本类不能被实例化(不需创建类的对象)例如: Dim bFile As Boolean bFile = File.Exists(F:\\Myfile.doc) File.Delete(F:\\Myfile.doc, D:\\Myfile.doc) File.Copy(F:\\Myfile.doc, D:\\Myfile.doc)
图6.10 控制台应用程序执行结果 控制台应用程序 • 创建临时文件并用open方法打开以读取其内容
Directory类 • 用于典型操作如移动、创建和删除目录,也可用于获取和设置与目录的创建、访问及写入操作相关的日期时间信息。 • 由于Directory类的方法是静态的,如果只想执行一个操作,那么使用Directory效率比较高。从另一方面来说,静态会对所用方法都执行安全检查,如果打算多次重用某个对象,可考虑改用DirectoryInfo相应实例方法,因为并不总是需要安全检查,在接受路径作为输入字符串的成员中,路径必须是正确的,否则将引发异常。
应用Directory类进行文件夹操作 Directory类提供各种目录操作 如:读取目录信息、创建、删除、测试等 Dim Filename(), driv() , Ftime As String Filename = Directory.GetFiles("D:\\") 返文件名的数组 driv = Directory.GetLogicalDrives() 返回驱动器的数组 Ftime = File.GetCreationTime(Filename(0))
FileSystemInfo类 此类包含文件和目录操作的方法,为 FileInfo 和 DirectoryInfo 对象提供基类。 当分析文件和目录时,一般使用该基类。
FileInfo和DirectoryInfo类 FileInfo类提供创建、复制、删除、移动和打开文件的实例方法。许多 FileInfo 方法在您创建或打开文件时返回其他 I/O 类型。可以使用这些其他类型进一步操作文件。有关更多信息,请参见特定的 FileInfo 成员,如Open、OpenRead、OpenText、CreateText 或 Create。如果打算多次重用某个对象,可考虑使用 FileInfo 的实例方法,而不是 File 类的相应静态方法,因为并不总是需要安全检查。在默认情况下,将向所有用户授予对新文件的完全读/写访问权限。 DirectoryInfo 类用于创建、移动和枚举目录和子目录的实例方法。典型操作,如复制、移动、重命名、创建和删除目录。如果打算多次重用某个对象,可考虑使用 DirectoryInfo 的实例方法,而不是 Directory 类的相应静态方法,因为并不总是需要安全检查。
图6.11程序执行进度指示器结果 图6.12搜索结果 例6.5设计程序进度指示器执行及搜索结果见图6.11和图6.12。
6.6 监视文件系统的变化 • 使用.NET 框架提供的FileSystem Watcher ( 文件系统监视器 ) 控件建立的程序可以在有文件创建和删除的时候,把消息列在窗体上。程序提供了类似于Windows提供的在有文件的创建、删除事件发生的时候通知文件系统变化的服务,用法见例6.6,其所用控件及相应程序运行结果如图 6.13 所示。
图6.15窗体显示文本文件被删除 图6.14窗体显示新建文本文件
6.7访问Windows注册表 系统注册表的每个注册表项之下还可以有注册表项,在注册表项之下还可以有一些值 (Value),记录系统、用户和软件等信息。 .NET框架提供了访问系统注册表的支持,Microsoft.Win32命名空间主要提供了两种服务:一种是用于处理操作系统引发的事件的服务,另一种则是对操作系统的注册表进行操作的服务。添加注册表项及相应数值的注册表编辑程序见例6.7。
图6.16添加注册表项及相应数值窗体 在例6.7中所设计的窗体见下图。
6.8集合的使用 Visual Basic.NET使用的.NET框架类库包含在现代面向对象程序设计语言中常用的基本数据结构(链表、堆栈、队列、哈希表)的类库,它们位于System.Collections命名空间中, System.Collections 命名空间包含接口和类,这些接口和类定义各种对象(如列表、队列、位数组、哈希表和字典)的集合。