(读书笔记).NET大局观-.NET框架类库概观

.NET框架类库概况

 

构建在.NET框架上全部的软件,都会用到通用语言进行时,即便基于最简单的CLR程序,也须要用到一部分.NET框架类库,更精致复杂的软件则使用这个类库提供的更多服务。程序员

 

.NET框架类库被组织一套具备层次结构的命名空间,每一个命名空间能够包含类型如类和接口,以及其余次级命名空间,整个体系的根名为Systemweb

 

System命名空间

System命名空间是.NET框架类库的最终源头,它除了包含一大套次级命名空间之外,自己也包含不少不一样类型,其中最有意思的就是下面这些:数据库

 

CLR通用类型系统:定义全部的核心类型编程

Consolewindows

Math 这个类提供两打以上的方法用来进行各类数学计算数组

Environment 用于访问“当前运行之程序”的环境信息浏览器

GC 用来影响垃圾回收机制什么时候发生以及如何发生服务器

 

 

System次级命名空间概览

(这一部分借鉴到http://hi.baidu.com/wqk1025/item/2dccf183f2700cc498255fff文章中的一部分)网络

命名空间 描述框架

Microsoft.CSharp          支持C#语言编译和生成代码

System                         包含了基础类,用于定义类型/数组/字符串/事件/事件处理程序/异常处理/接口/数据类型转换/数学计算/应用程序环境管理等等.

System.Coolections   包含了一组用于管理对象集合(例如列表/队列/数组/哈希表/字典等)的类

System.Data    主要包括了组成ADO.NET体系结构的类

System.diagnostics     提供用于调试/跟踪,以及与系统进程/事件日志/性能计数器进行交互的类

System.Drawing 提供访问GDI+基本图形功能(在System.Drawing如下的命名空间,包括System.Drawing.Drawing2D和System.Drawing.Text等,提供了更高级和更特殊的GDI+图形功能)的类

System.IO    包含了用于读写数据流/文件和普通输入/输出(I/O)功能的类型和类

System.Reflection    包括提供类型检测和动态绑定对象功能的类和接口

System.reflection.Emit     生成动态程序集

System.Text     包含用于字符编码/将字符块转换为字节快/将字节块转换为字符块等功能的对象

System.Text.RegularExpressions     包含了提供访问.NET框架正则表达引擎的类

System.Timer                  提供了Timer组件

System.Web    包含了用于实施浏览器/服务器通讯和其余Web相关功能的类

System.Web.Services    包含了用于建立和消费Web服务的类

System.Web.UI    包含了用于建立Web页和控件的用户接口的类和接口

System.Windows.Forms    包含了用于建立基于WINDOWS的用户接口的类

System.XML   提供了支持处理XML的类

 

System.Runtime.Remoting是另外一很是重要命名空间,由于它包含你的类型容许访问其余进程记忆其余机器上的托管对象

 

 

 

类库能够分为几大类:

基础服务

用于建立于人们交互的web应用程序的服务

用于处理数据的服务

用以建立分布式程序的服务

 

 

基础命名空间

接下来要描述的是.NET技术的基本知识——输入和输出,序列化,反射,事务,以及互操做性——应该归入每个.NET程序员开发人员的武器库

 

输入和输出 System.IO

这类最重要的基础是stream类,该类定义了stream的有用的抽象,它是个字节序列以及以下的一些方法:stream的读取和涂写,stream是一个抽象类,所以有许多特定stream类继承于它,目标是为开发人员提供一致的方法访问各类各样的信息。

 

序列化System.Runtime.Serilization

对象一般都有对象(state),例如一个类的某个实体能够有一个或者多个字段,每个都包含某个值,从一个对象中抽取这种状态,不管是将它存储于某地,或者是经过网络传送它,一般都是有意义的,这种抽取的动做称为”讲一个对象序列化”,而反向的处理,从一个被序列化的状态重建一个对象,即便人们广为人知的反序列化,有点混淆的是:序列化这一术语一般同时指定的是作这两件事的能力

 

 

.NET框架提供两套不一样的格式器,一个是二进制(binaryformatter)实现于命名空间System.Runtime.Serialization.Formatters.Binary的BinaryFormatter class中,将一个对象序列化为一个“直截了当,形式精简,解释(parse)快速”的二进制格式。

二进制格式器以一个简单而精炼的形式吐出状态信息

 

另外一个格式器SOAP,实现于命名空间System.Runtime.Serialization.Formatters.Soap中的Soap Formatter类中,将一个对象序列化为一个SOAP消息

SOAP格式生成一样的信息并包装秤XML格式,然后格式化成为一个SOAP消息

 

 

当各时期将某个对象序列化之后,所得结果放入一个流中,所谓流就是字节序列的一个抽象概念,所以可包容任何序列化格式,一旦对象呗存储于一个流中,对象状态就能够被存储于磁盘上(或者被持久化了),或是经过网络发送给其余计算机

 

对于一个能够被序列化的类型,其设计这必须为其标上Serializable特性

一个被标注以Serializable的类型,当其某个实例被序列化时,能够指明某些字段不被保存-只要为他们设置NonSerializable特性便可

 

反射 System.Reflection

每个程序集都包含元数据,手上总有着元数据是很便利的,由于它容许哦咱们建立有意义的功能,例如visual studio中的智能感知技术

反射(Reflection)是.NET中的重要机制,经过放射,能够在运行时得到.NET中每个类型(包括类、结构、委托、接口和枚举等)的成员,包括方法、属性、事件,以及构造函数等。还能够得到每一个成员的名称、限定符和参数等。有了反射,便可对每个类型了如指掌。若是得到了构造函数的信息,便可直接建立对象,即便这个对象的类型在编译时还不知道。

程序代码在编译后生成可执行的应用,咱们首先要了解这种可执行应用程序的结构。

 应用程序结构分为应用程序域—程序集—模块—类型—成员几个层次,公共语言运行库加载器管理应用程序域,这种管理包括将每一个程序集加载到相应的应用程序域以及控制每一个程序集中类型层次结构的内存布局。

 程序集包含模块,而模块包含类型,类型又包含成员,反射则提供了封装程序集、模块和类型的对象。咱们可使用反射动态地建立类型的实例,将类型绑定到现有对象或从现有对象中获取类型,而后调用类型的方法或访问其字段和属性。反射一般具备如下用途。

 (1)使用Assembly定义和加载程序集,加载在程序集清单中列出模块,以及今后程序集中查找类型并建立该类型的实例。
 (2)使用Module了解包含模块的程序集以及模块中的类等,还能够获取在模块上定义的全部全局方法或其余特定的非全局方法。
 (3)使用ConstructorInfo了解构造函数的名称、参数、访问修饰符(如pulic 或private)和实现详细信息(如abstract或virtual)等。使用Type的GetConstructors或GetConstructor方法来调用特定的构造函数。
 (4)使用MethodInfo了解方法的名称、返回类型、参数、访问修饰符(如pulic 或private)和实现详细信息(如abstract或virtual)等。使用Type的GetMethods或GetMethod方法来调用特定的方法。
 (5)使用FiedInfo了解字段的名称、访问修饰符(如public或private)和实现详细信息(如static)等,并获取或设置字段值。
 (6)使用EventInfo了解事件的名称、事件处理程序数据类型、自定义属性、声明类型和反射类型等,添加或移除事件处理程序。
 (7)使用PropertyInfo了解属性的名称、数据类型、声明类型、反射类型和只读或可写状态等,获取或设置属性值。
 (8)使用ParameterInfo了解参数的名称、数据类型、是输入参数仍是输出参数,以及参数在方法签名中的位置等。

 System.Reflection.Emit命名空间的类提供了一种特殊形式的反射,能够在运行时构造类型。
 反射也可用于建立称为类型浏览器的应用程序,使用户可以选择类型,而后查看有关选定类型的信息。

 

XMLSystem.Xml

XML是eXtensible MarkupLanguage的缩写

   扩展标记语言XML是一种简单的数据存储语言,使用一系列简单的标记描述数据,而这些标记能够用方便的方式创建,虽然XML占用的空间比二进制数据要占用更多的空间,但XML极其简单易于掌握和使用。 
   XML与Access,Oracle和SQL Server等数据库不一样。数据库提供了更强有力的数据存储和分析能力,例如:数据索引、排序、查找、相关一致性等,XML仅仅是展现数据。事实上XML与其余数据表现形式最大的不一样是:它极其简单。这是一个看上去有点琐细的优势,但正是这点使XML不同凡响。

事务 System.Transaction

事务的思想,即一组操做做为一耳光单元成功或失败,是众多应用程序的基础,这个概念原本很简单,全部操做必须成功,要么所有失败

 

 

1、事务的定义

所谓事务,它是一个操做集合,这些操做要么都执行,要么都不执行,它是一个不可分割的工做单位。典型的例子就像从网上银行系统的账户A转账到账 户B,它通过两个阶段:1. 从账户A取出款项。2. 把款项放入账户B中。这两个过程要么同时成功,要么同时失败,这一系列的操做就被称为事务性(Transactional)操做。

在一个事务性操做的环境下,操做有着如下的4种特性,被称为ACID特性

原子性(Atomicity)

当事务结束,它对全部资源状态的改变都被视为一个操做,这些操做要不一样时成功,要不一样时失败。

一致性(Consistency)

操做完成后,全部数据必须符合业务规则,不然事务必须停止。

隔离性(Isolation)

事务以相互隔离的方式执行,事务之外的实体没法知道事务过程当中的中间状态。

持久性(Durable)

事务提交后,数据必须以一种持久性方式存储起来。

  2、事务管理器

在软件系统当中能够看到不管在数据库、Web服务、WCF、文件系统都存在着数据参与到事务运做当中,咱们把管理这些数据的工具称为资源管理器RM(Resources Manager)。而事务管理器TM(Transaction Manager)就是协调多个资源管理器的工做,保证数据完整性的工具。

 

由上图能够看到事务的管理流程,系统通知事务管理器TM来启动事务,事务管理器TM控制向多个资源管理器RM并协调RM之间的事务操做。图中存在两个持久化RM,分别管理数据库和文件系统,这些事务操做要不一样时成功,要不一样时失败。

事务管理器通常分为三类:轻量级事务管理器(LTM)、核心事务管理器(KTM)、分布式事务协调器(DTC)。

1. 轻量级事务管理器 (LTM)

它是包括在 System.Transactions 命名空间内的一个事务管理框架,它只能管理单个应用程序域内的事务。LTM 能够管理多个易变的RM,但只能管理一个持久化RM。若事务试图加入第二个持久化RM,那轻量级事务管理器LTM将提高级别。LTM是性能最高的事务管理 器,在可选择的状况下应该尽量地使用 LTM 事务管理器。

这里易变RM是指它参与会引起 “未肯定状态” 的2PC事务的时候,不须要恢复服务,更多时候,易变RM的数据只存储在内存当中。

而持久化RM是指它参与会引起 “未肯定状态” 的2PC事务的时候,它须要恢复服务,持久化RM管理的数据是在于硬盘当中。因此,参与2PC事务的的持久RM必须有新旧两个版本,若是事务引起 “未肯定状态” 的时候,那么它就会联系持久化RM,恢复到其中一个版本。

2. 核心事务管理器 (KTM)

KTM是用于WindowsVista和Windows Server 2008 系统中的轻量级事务管理器,与LTM相像,它能够管理多个易变的RM,但只能管理一个持久化RM。

3. 分布式事务协调器(DTC)

分布式事务协调器DTC(Distributed Transaction Coordinator)能管理多个持久化RM中的事务,事务能够跨越应用程序域、进程、硬件、域等全部的边界。在Windows Server 2008当中,DTC支持OleDB、XA、WS-AtomicTransaction、WSCoordination、WS- BusinessActivity等多个协议。因为分布式事务须要在多个参与方之间实现屡次通信,因此是一种巨大的开销,所以,在可使用LTM和KTM的时候,应该尽可能避免使用DTC。在上面图片中的事务同时启动了两个RM分别处理数据库数据与文件数据,当中启动的就是DTC分布式事务。

4. 事务类System.Transactioins.Transaction

Transaction是由Framework 2.0 就开始引入,用于显示管理事务的一个类。经过Transaction能够直接管理事务的停止、释放,也能够获取、克隆当前的环境事务类。

Transaction的公用属性

其中Transaction.Current 比较经常使用,它能够指向一个当前运行环境中的事务,若是环境事务不存在,系统将返回一个null

Transactiontransaction=Transaction.Current;

属性

说明

Current

获取或设置环境事务。

IsolationLevel

获取事务的隔离级别。

TransactionInformation

检索有关某个事务的附加信息。

 

 

互操做: System.Runtime.InteropService

在.NET框架发布之前,windows开发世界有windows DNA技术一统天下,不管.NET框架多么成功,先于它的windows DNA技术并不会立刻消失。

鉴于微软的库克已经对这些应用作了巨大的投资,.NET框架必须提供某种方法,让新程序可以链接它们,一样重要的是。Framework还必须提供一个有效的办法,让托管代码访问如今非com技术建立的DLLs,并调用有底层操做系统提供的本地服务,这额问题的解决方案,由System.Runtime.InteropService命名空间中的类提供。

 
Windows GUI system.windows.from

这个内容只要作过winfrom的实例就应该比较熟悉

 

WPF(WindowsPresentation Foundation)微软推出的基于WindowsVista的用户界面框架,属于NET Framework 3.0的一部分。它提供了统一的编程模型、语言和框架,真正作到了分离界面设计人员与开发人员的工做;同时它提供了全新的多媒体交互用户图形界面。

 

远程安装windowsform应用程序:ClickOnce

Windows Form界面和浏览器界面哪一个更好,答案无疑要视具体点状况而定,浏览器容许访问全世界的web,并且人们都知道怎么用。

Windows Form应用程序固然值得用户,它们的响应速度更快

 

尽管这样,今天开发的大多数.NET应用程序都是目标与浏览器的,一个重要的缘由是来自于部署新版本本地windows应用程序的挑战,若是运行在客户端的程序集发生了任何变化,那么全部客户系统都必须予以更新,比较而言,部署基于浏览器的应用程序的新版本,一般只须要更新程序所运行的服务器便可,若是windows form应用程序安装变得更容易一些,开打人员将少一个构建基于浏览器的软件的理由,并使本地windows应用程序的优势获得最大的发挥。

 

ClickOnce是.NET Framework 2.0版本中新增的技术,它的存在实在使得windows form也能用程序的部署与升级更容易,ClickOnce应用程序能够从一个web网页,网络上某处的共享文件系统以及本地设备进行安装,一旦安装好,ClickOnce应用程序可以自动检测什么时候发生了更新,而后只复制和安装哪些自身有变化的部分,如有必要,更新或者整个安装过程也能够回滚

相关文章
相关标签/搜索