微软.NET开发认证(核心篇)

微软.NET开发认证基础技术知识大局观——核心篇

 
概述
Microsoft.NET 认证是在.NET技术面世后微软向软件开发者提供的开发系列认证。本文从学习知识的角度出发讲解作为一名合格的.NET开发认证工程师需要掌握的基础技术。虽然.NET的发行版本已经到了3.5,但CLR(Common Language Runtime)作为.NET框架中的核心部分还处于2.0版本。因此本文提到的.NET Framework功能都基于2.0,这也符合目前各项.NET开发认证的技术要求。
 
文章的大部分内容在微软官方教程和MSDN文档都有体现,本文以微软官方教程为基础,进行概括总结,使读者树立良好的.NET认证基础技术知识大局观。如果读者想深入学习这些知识建议阅读微软官方教程和MSDN文档。文章中所述的各项内容最终解释权归微软所有。
 
核心篇内容包括:系统类型和接口、集合和泛型、配置和安装程序集、监视和调试应用程序、读取和写入文件、创建全球化应用程序、委托和事件等七项内容。
 
1. 系统类型和接口
.NET Framework 包含许多预先构建的系统类型,用于快速构建基于.NET平台的相关应用系统,包括ASP.NET、Windows Form和企业级应用开发等。.NET Framework是强类型的开发框架,提供了通用类型系统(CTS),CTS中的所有类型派生自System.Object类型。
 
值类型和引用类型。值类型和引用类型是.NET提供的两种数据类别,值类型数据保存在堆栈中,而引用类型的数据保存在托管堆中。
 
装箱和拆箱。装箱是值类型到object类型或该值类型所实现的任何引用类型的隐式转换。拆箱是从object类型或引用类型到值类型的显式转换。
 
特殊系统类型。.NET 提供了一些特殊的系统类型,包含泛型、Nullable类型、异常类和特性(attribute)等。泛型可以避免装箱拆箱操作,同时更容易编写类型安全且可重用的代码。Nullable类型的引入解决了值类型设置null值的需求。异常类表示在应用程序执行期间发生的错误。特性是一个声明性标记,通过特性将编程元素的信息传递给运行时,从而改变代码的执行行为。
 
异常处理。.NET使用try、catch、 finally和throw关键字来处理异常,try块用来隔离可能产生异常的代码,catch块用来扑获产生的异常,finally块用来包含不管是否出现异常都会执行的代码,各种异常类的命名约定以Exception为后缀。
 
使用接口。接口是类或结构遵循的约定,这个约定的具体行为由实现该接口的类或结构来完成。.NET Framework中包含很多接口,常用的有IDisposable、 IComparable、 IEquatable、 IConvertible和IFormattable等。许多接口都提供了泛型版本,显著提高用户代码编写效率。
 
2. 集合和泛型
.NET Framework 中包含了很多用于集合的接口和集合类型,在System.Collections命名空间中包含各种集合和集合接口的非泛型版本,而 System.Collections.Generic命名空间提供了泛型版本集合类型。为满足某些特殊应用,.NET Framework还在System.Collections.Specialized命名空间中提供了一些专用集合。
 
常见集合接口和类型。可应用于集合的常见接口有:IComparable接口用来比较两个对象的大小主要用于排序,ICollection接口定义所有非泛型和泛型集合的大小、枚举数和同步访问方法,IList接口提供对集合进行索引访问,IComparer接口提供两个对象的比较方法,IEqualityComparer接口用于检查两个集合是否相等,IDictionary接口实现集合键/值对行为,IEnumerable和IEnumerator接口用于实现集合项的迭代。主要的非泛型集合类型有ArrayList、Hashtable、SortedList、BitArray、Queue、Stack等。
 
泛型集合。.NET Framework 2.0实现了对泛型集合的支持,常用的泛型集合包括List、Stack、Queue、Dictionary和LinkedList等,通过泛型集合可创建类型安全的集合对象,并避免装箱和拆箱操作。
 
专用String类。专用String类包括 StringCollection和StringDictionary ,StringCollection可以看作是元素指定为字符串的泛型List类,StringDictionary可以看作是将键和值都指定为字符串时的泛型Dictionary 类。另外,StringEnumerator类提供对字符串集合的枚举操作,而通过CollectionUtil类可以创建不区分字符大小写的 Hashtable或SortedList对象实例。
 
专用Dictionary类。专用 Dictionary类包括ListDictionary、HybridDictionary和OrderedDictionary。 HybridDictionary内部提供一种机制,在元素较少时使用ListDictionary进行存储,在元素增加到某个数量时采用 Hashtable进行存储,有效提高性能,而OrderedDictionary用来存储通过键或索引进行排序的元素。
 
专用Named Collection类。Named Collection表示可通过键或索引访问的关联键和值的集合,通过派生NameObjectCollectionBase类创建具有各自专用行为的键值集合。NameValueCollection从NameObjectCollectionBase继承,实现了将多个字符串值与单个字符串键相关联功能。
 
专用位结构。专用位结构提供了Boolean值和小整数的集合存储。BitVector32支持将Boolean值存储在32位结构中,而BitVector32.Section结构支持小整数的存储。
 
扩展集合基类。集合基类主要包括单个元素的集合基类和键值对字典类型的集合基类。通过继承CollectionBase抽象类和ReadOnlyCollectionBase可实现可读写版本的集合和只读集合。通过继承DictionaryBase抽象类可实现自定义的Dictionary类型。
 
3. 配置和安装程序集
由于COM(Component Object Model,组件对象模型)组件的版本控制信息是存储在系统注册表中,因此新旧COM组件间总会存在版本冲突的可能性,这通常被称为 DLL(Dynamic Link Library,动态链接库)冲突。由于.NET 程序集本身存储类型、资源、版本控制、安全权限和元素据的所有信息,不存在注册表设置依赖,因此完全解决了COM组件中存在的动态链接库版本不同冲突问题。
 
安装程序集。.NET程序集的安装可以有多种方式,包括使用XCOPY,Windows安装程序和自定义安装程序。根据安装位置的不同,程序集可以安装在本地应用程序文件夹或全局程序集缓存中,如果需要安装到全局程序集缓存中需要对程序集进行强类型签名。
 
单文件程序集和多文件程序集。单文件程序集是自包含程序集,只包含一个文件,比如.dll文件或.exe文件,文件包含执行程序集所需要的所有元素,包括程序集清单、MSIL代码和数据类型等。对于C# 代码通过执行CSC命令可以生成单个的程序集文件。多文件程序集有多个文件组成,程序集的不同类型元素可以存储在不同的文件中,在基于网络的应用程序中,多文件程序集可以更细粒度的部署所需要的模块。多文件程序集至少需要包含一个程序集清单文件,编译完成程序集中引用的所有文件后,可以通过程序集链接器 (Al.exe)来创建输出文件。输出文件包含程序集清单和对作为程序集组成部分的所有模块或资源的引用信息。对于C#代码通过执行CSC编译器命令和程序集链接器命令来生成多个文件程序集。
 
全局程序集缓存。全集程序集缓存由公共语言运行时(CLR)管理,提供系统范围的代码缓存,因此,多个应用程序共享的程序集通常安装在全局程序集中。全集程序集作为注册程序集的中央存储库,与 Windows注册表是一个包含所有信息的单一实体一样保存所有程序集的系统文件夹。当将程序集添加到全局程序集缓存时,全局程序集缓存会为该程序集提供完整性检查,确保程序集不被篡改。全局程序集缓存对应的目录为Windows系统目录中assembly子目录(GAC),在安装.NET Framework时,相关程序集会自动安装到全局程序集缓存,同时.NET Framework提供Gacutil.exe工具在全局程序集缓存中安装和卸载共享程序集。
 
强名称程序集。强名称为程序集提供唯一的标识,防止了程序集间命名和版本的冲突,还确保了程序集的真实唯一性,全局程序集缓存中只可以安装强命名的程序集。强名称由程序集文件名、版本号、区域性信息、公钥及数字签名,以确保程序集的真实性。通过将引用的程序集的签名与存储在其调用程序集的清单文件中的签名做比较,强名称使.NET Framework能够检查引用的程序集是真正的程序集还是恶意程序集。.NET Framework提供sn.exe工具为程序集创建并分配强名称。
 
自定义安装程序集。.NET Framework提供了一些类来实现自定义安装程序从而灵活控制程序安装的过程。通过自定义安装程序可执行一些自定义任务。例如,如果希望根据某个客户端购买的副本数量来安装应用程序,则在安装过程中需要执行一些验证任务。这些任务包括对客户端许可、客户端购买的副本数量以及客户端已安装的实例数进行在线验证。自定义安装程序通过System.Configuration.Install命名空间中提供的类型进行编程,通过自定义安装程序开发人员能够在安装过程中执行自定义操作。该命名空间下的主要类为通过Installer类创建自定义程序,通过AssemblyInstaller类安装程序集,通过 CommponentInstaller类复制运行时安装的组件设置,通过InstallerCollection和InstallContext类管理程序集的安装。Installer类通过使用InstallEventHandler委托处理安装事件,包括BeforeInstall、 AfterInstall、Committing、Committed、BeforeRollback、AfterRollback、 BeforeUninstall和AfterUninstall事件。
 
配置程序集。.NET应用程序一般都包含应用程序配置文件,配置文件具有.config扩展名称,Web程序配置文件为Web.Config,普通应用程序配置文件为应用 ApplicationName.exe.Config,Machine.config文件是.NET Framework提供的主配置文件,当CLR加载程序集时,Machine.config用于提供应用程序的默认配置设置。
 
管理配置设置。.NET Framework通过System.Configuration命名空间提供了各种类来管理配置文件,主要包括 ConfigurationManager、Configuration和WebConfigurationManager等核心类。接口包括 IConfigurationSectionHandler、ISettingsProviderService和 IApplicationSettingsProvider等。管理配置元素的类包括ConfigurationElement、 ConfigurationElementCollection、ConfigurationElementProperty等。管理配置文件中的节的类包括ConfigurationSection、ConfigurationSectionCollection、 ConfigurationSectionGroup、ConfigurationSectionGroupCollection等。
 
4. 监视和调试应用程序
.NET Framework 提供了多个用于监视和调试应用程序的功能,还提供了多个工具和类以帮助跟踪和调试在编译和运行应用程序时所遇到的错误。 System.Diagnostics 命名空间提供了特定的类实现与系统进程、事件日志和性能计数器进行交互,同时还提供用于调试应用程序和跟踪代码执行情况的类。 System.Management 命名空间提供了基于Windows 管理规范 (WMI)的管理信息和管理事件集合的访问功能。
 
管理事件日志。Windows系统提供了事件日志用于存储重要事件和资源问题等详细信息,通过这些信息技术人员可以诊断系统或应用程序出现异常的原因。.NET Framework提供EventLog类在网络上写入事件日志、读取事件日志项以及创建和删除事件日志与事件源的功能。 EntryWrittenEventHandler委托提供与事件日志进行异步交互的方式。支持EventLog类提供对详细控制的访问,包括权限限制、指定事件日志类型的功能以及循环访问事件日志项集合的功能。
 
管理应程序进程。.NET Framework提供Process类及其他辅助类来检索运行在当前系统上的所有进程的列表、当前进程的信息以及进程所使用的所有模块的列表,对应用程序进程进行启动和停止等管理。通过ProcessThread 和 ProcessModule 类获取有关进程线程和模块的详细信息。通过ProcessStartInfo类,可以指定用来启动新进程的多种元素,如输入流、输出流、错误流、工作目录以及命令行谓词和参数,从而实现对进程的行为进行更细微的控制。
 
管理应用程序性能。Windows系统包含一个性能监视器工具,结合性能计数器可以有效监视系统和应用程序的各种性能。.NET Framework提供PerformanceCounter 类来监视系统性能,PerformanceCounter 类对计数器进行取样,并使用CounterSample类来计算连续性能计数器样本的结果。PerformanceCounterCategory 类实现新建自定义计数器和类别的方式,可以写入本地自定义计数器和从本地及远程计数机中读取。CounterCreationData 类用于在一个类别中创建多个计数器并指定其类型。与性能计数器组件关联的其他类提供对计数器集合、计数器权限和计数器类型的访问。
 
调试应用程序。开发人员通过使用Visual Studio中的调试器以及.NET Framework提供的Debugger类、Debug类、StackFrame类和StackTrace类以编程方式来调试应用程序。
 
跟踪应用程序。.NET Framework提供Trace类、TraceSource类、TraceSwitch类、Trace Listener类以编程方式来跟踪应用程序,在多线程情况下通过CorrelationManager类来分类跟踪信息。
 
管理系统和事件。Windows系统通过 WMI(Windows Management Instrumentation)公开了Windows操作系统中的管理信息和事件。.NET Framework提供System.Management命名空间中的类来访问WMI,主要包括ManagementQuery、 ObjectQuery、EventQuery、ManagementScope、ManagementObjectSearcher等类,支持WMI查询语言(WQL)检索系统资源信息。
 
5. 读取和写入文件
.NET Framework 提供了控制应用程序和文件系统之间进行交换的功能。各类.NET应用程序可以使用文件系统类和压缩类来存储、访问、隔离、压缩和验证用户提供的数据。
 
管理文件系统。.NET Framework在System.IO命名空间提供允许读写文件和目录的类型。通过Path类来访问文件路径,通过File和FileInfo类来访问文件,通过Directory和DirectoryInfo类来管理目录,通过DriveInfo类来访问驱动器,通过 FileSystemWatcher类来监视文件目录,处理文件系统事件。
 
使用字节流。.NET Framework在System.IO命名空间中提供了Stream类来实现在文件和内存中读写数据,流可以看作是应用程序代码和数据存储后台之间的管道,通过使用Stream类的派生类来管理字节流,支持同步和异步的流处理。通过使用FileStream类来管理文件数据,通过使用 MemoryStream类来管理内存数据,通过使用BufferedStream类提供额外的内存缓冲区来提高流性能。
 
压缩与解压缩。.NET Framework在System.IO.Compression命名空间提供了用于对文件进行压缩及解压缩的类。DeflateStream类提供使用 Deflate算法压缩和解压缩流的方法和属性,这是无损压缩和解压缩文件的行业标准算法,结合了LZ77算法和霍夫曼编码。GZipStream类表示 GZip数据格式,这种格式包括一个检测数据损坏的循环冗余校验值。GZip数据格式使用的算法与DeflateStream 类的算法相同,但它支持扩展以使用其他压缩格式。
 
独立存储。独立存储用来存储应用程序数据的特殊数据区域,允许应用程序保护其数据避免被其他应用程序访问。.NET Framework提供IsolatedStorageFile和IsolatedStorageFileStream类来使用独立存储功能。
 
文本、流、字符串和二进制数据操作。.NET Framework在System.IO命名空间提供了TextReader和TextWriter抽象类及其派生类来管理应用程序数据。使用 StreamReader和StreamWriter类来管理流数据,使用StringReader和StringWriter类来读写字符串中的子字符串,使用BinaryReader和BinaryWriter类来读写二进制数据。
 
高效操作字符串。.NET Framework中的字符串是Char数据类型的字符数组。字符串为引用类型,不直接保存其数据,并且字符串对象是不变的。为高效操作字符串,.NET Framework在System.Text命名空间提供了StringBuilder类,此类表示值为可变字符序列的类似字符串的对象。可以通过追加、移除、替换或插入字符操作对它表示的字符串进行修改。
 
使用正则表达式。正则表达式可以解析、编辑和替换文本,可以验证用户输入、替换字符串中的无效字符或在文章中查找匹配某种特定模式的所有子字符串。.NET Framework通过System.Text.RegularExpressions命名空间提供了使用正则表达式的类来实现正则表达式,主要类型包括 RegEx、Capture、CaptureCollection、Group、GroupCollction、Match和 MatchCollection类。
 
6. 创建全球化应用程序
.NET Framework 提供的全球化功能可以在无需更改源代码的情况下实现针对不同的语言环境进行定制应用程序的目的,这对于独立软件供应商来说在全球各地进行当地版本的营销是一个巨大的商机,并且还可以节省成本。.NET Framework在System.Globalization命名空间中提供了实现应用程序全球化和本地化的类,可以比较轻松地实现.NET应用程序的全球化。
 
处理文化环境信息。通过使用 CultureInfo来访问文化环境信息,该类呈现区域性特定的信息,如关联的语言、子语言、国家/地区、日历和区域性约定。通过使用 RegionInfo类来访问区域信息,RegionInfo类包含的名称是一个ISO 3166 中为国家/地区定义的包含两个字母的代码,字母不区分大小写。通过使用DateTimeformatInfo类来格式化特定于某种文化的日期和时间值。通过使用NumberFormatInfo类来格式化特定于某种文化的数值。通过使用CompareInfo类来比较区域性的信息。
 
创建自定义文化环境。.NET Framework提供了CultureAndRegionInfoBuilder类来定义一个新型或基于其他区域性和国家/地区的自定义区域性文化环境。自定义文化环境可以安装在计算机上,然后由运行在该计算机上的任何应用程序使用。创建自定义文化环境的方式有两种,可以基于Culture类的现有对象的信息构建新的文化环境,也可以从头开始构建一个新的文化环境。
 
使用基本编码类。字符编码是使用位序列表示字符的方法。编码是一个将一组Unicode字符转换为一个字节序列的过程。解码是将一个编码字节序列转换为一组Unicode字符的过程。.NET Framework的System.Text命名空间包含表示ASCII、Unicode、UTF-7和UTF-8字符编码的类。Encoding抽象类定义了对 Unicode 字符进行的操作,主要用于在不同的编码和Unicode之间进行转换。EncodingInfo类提供有关编码的基本信息。.NET Framework 提供多个Encoding类的实现以支持当前Unicode编码和其他编码,包括ASCIIEncoding、UTF7Encoding 、UTF8Encoding、UnicodeEncoding和UTF32Encoding等类。
 
使用高级编码功能。Encoder和 Decoder类为编码和解码提供了附加功能,在遇到错误时,Encoder和Decoder类提供编码和解码过程的错误处理。使用Encoder和 EncoderFallback类来处理编码故障事件。使用Decoder和DecoderFallback类来处理解码故障事件。
 
7. 委托和事件
.NET Framework 使用委托机制来实现事件驱动程序。.NET Framework 2.0 对委托进行了增强,增加了泛型委托、匿名方法、协变和逆变等新功能。
 
委托。委托与类和接口相似,都是引用类型。可以声明委托类型,定义委托类型的变量以及创建委托的实例。委托可以在运行时间接调用一个或多个方法。在声明委托类型或基于委托类型的变量时并不需要指定将要调用哪些方法,这一操作是在创建委托的实例时才进行的,并且在运行时还可以将一个或多个方法与委托动态关联。委托与C++中的函数指针类似,同C++函数指针不同的是,它们是类型安全的并且是具有各自属性和方法的对象实例。
 
使用委托进行组件间的交互。可以使用 Delegate类来实例化某些对象,这些对象可作为指向子例程、函数、静态方法或实例方法的引用。尽管委托不能被继承,但可以使用任何返回值或参数签名来实例化委托。编译器从Delegate基类派生出委托的新实例。由于委托实例为引用类型,因此可将它们作为参数传递给其他方法,这是委托的常见用法之一。可以使用Delegate类间接调用应用程序方法。
 
匿名方法。匿名方法允许通过指定要被委托调用的内联代码块,而不是要被委托调用的现有方法来创建委托的实例。因此,通过匿名方法用户无需每次在将委托作为参数传递给方法调用时创建新的方法,从而节省代码。Visual basic不支持匿名方法。
 
协变和逆变。协变,当委托引用的方法的返回类型继承于委托自身的返回类型时发生协变。由于方法的返回类型继承于委托的返回类型,因此仍然认为签名匹配。逆变,允许声明具有特定参数的委托,这些参数继承了将要调用的方法中的参数所使用的类型。但是,为了使逆变工作,委托的签名中参数的顺序和数量必须仍然与方法的签名匹配。Visual basic不支持协变和逆变。
 
事件。事件是当有意义的事情发生时一个类通知另一个类的途径。它是事件驱动编程的基础。事件不仅提供了将操作方与响应方区分开来的能力,还提供了动态响应在程序执行期间的任意时刻所发生的情况的能力。事件将不同的对象实例联系起来以形成可使用的程序。在创建被通知类时,如果想要在事件发生时执行某些操作,则可以给事件添加事件处理程序。可以通过事件控制组件间的交互,.NET通过使用Event语句创建事件,通过使用EventHandler委托给事件分配一个句柄,通过使用EventArgs类将参数传递给事件处理程序。事件委托可以自定义,如果需要传递更具体的事件参数信息,可以通过继承EventArgs类实现更具体的事件参数类。
本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/zhzuo/archive/2009/07/15/4351910.aspx

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值