(读书笔记).NET大局观-.NET框架类库概观
.NET框架類庫概況
?
構建在.NET框架上所有的軟件,都會用到通用語言進行時,即使基于最簡單的CLR程序,也需要用到一部分.NET框架類庫,更精致復雜的軟件則使用這個類庫提供的更多服務。
?
.NET框架類庫被組織一套具有層次結構的命名空間,每個命名空間可以包含類型如類和接口,以及其他次級命名空間,整個體系的根名為System
?
System命名空間
System命名空間是.NET框架類庫的最終源頭,它除了包含一大套次級命名空間以外,本身也包含很多不同類型,其中最有意思的就是下面這些:
?
CLR通用類型系統:定義所有的核心類型
Console
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命名空間的類提供了一種特殊形式的反射,可以在運行時構造類型。
?反射也可用于創建稱為類型瀏覽器的應用程序,使用戶能夠選擇類型,然后查看有關選定類型的信息。
?
XML:System.Xml
XML是eXtensible MarkupLanguage的縮寫。
?? 擴展標記語言XML是一種簡單的數據存儲語言,使用一系列簡單的標記描述數據,而這些標記可以用方便的方式建立,雖然XML占用的空間比二進制數據要占用更多的空間,但XML極其簡單易于掌握和使用。?
???XML與Access,Oracle和SQL Server等數據庫不同。數據庫提供了更強有力的數據存儲和分析能力,例如:數據索引、排序、查找、相關一致性等,XML僅僅是展示數據。事實上XML與其他數據表現形式最大的不同是:它極其簡單。這是一個看上去有點瑣細的優點,但正是這點使XML與眾不同。
事務 System.Transaction
事務的思想,即一組操作作為一耳光單元成功或失敗,是眾多應用程序的基礎,這個概念本來很簡單,所有操作必須成功,要么全部失敗
?
?
一、事務的定義
所謂事務,它是一個操作集合,這些操作要么都執行,要么都不執行,它是一個不可分割的工作單位。典型的例子就像從網上銀行系統的帳戶A轉帳到帳 戶B,它經過兩個階段:1. 從帳戶A取出款項。2. 把款項放入帳戶B中。這兩個過程要么同時成功,要么同時失敗,這一系列的操作就被稱為事務性(Transactional)操作。
在一個事務性操作的環境下,操作有著以下的4種特性,被稱為ACID特性
| 原子性(Atomicity) | 當事務結束,它對所有資源狀態的改變都被視為一個操作,這些操作要不同時成功,要不同時失敗。 |
| 一致性(Consistency) | 操作完成后,所有數據必須符合業務規則,否則事務必須中止。 |
| 隔離性(Isolation) | 事務以相互隔離的方式執行,事務以外的實體無法知道事務過程中的中間狀態。 |
| 持久性(Durable) | 事務提交后,數據必須以一種持久性方式存儲起來。 |
? 二、事務管理器
在軟件系統當中可以看到無論在數據庫、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應用程序能夠自動檢測何時發生了更新,然后只復制和安裝哪些自身有變化的部分,若有必要,更新或者整個安裝過程也可以回滾
?
轉載于:https://www.cnblogs.com/james1207/p/3297252.html
總結
以上是生活随笔為你收集整理的(读书笔记).NET大局观-.NET框架类库概观的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: delphi 常用属性/方法《转》
- 下一篇: ./ . 和#!/bin/bash 辨析