本文將向您介紹.NET框架4中的主要功能和改進特征。請注意,本文中並沒有提供有關這些新功能的綜 合信息,並隨時可能更改。
請注意,.NET框架4引入了一個改進的安全模式。有關該內容的更多的信息,請參閱文章《.NET框架4 中的安全變化》。
具體來說,本文中將介紹.NET框架4的如下一些新功能和改進特征:
應用程序兼容性和部署
內核新功能及改進
托管擴展框架
並行計算
網絡編程
Web開發
客戶端開發
數據
通信和工作流
一、應用程序兼容性和部署
除了一些在安全、標准遵從、正確性、可靠性及性能等方面的改進之外,.NET框架4與基於早期.NET框 架版本構建的應用程序高度兼容。
.NET框架4並不會自動使用當前版本的公共語言運行庫來運行使用早期版本的.NET框架構建的應用程序 。為了在.NET框架4下運行以前的應用程序,你必須使用在您的VisualStudio項目的屬性中指定的目 標.NET框架版本重新編譯您的應用程序,或者在應用程序的配置文件中使用元素來指定支持的運行時刻庫 。
如果安裝.NET框架4後您的應用程序或組件無法工作,請在微軟聯系網站提交一份錯誤報告。您可以如 在《.NET框架4應用程序兼容性》中所描述的那樣進行兼容性測試,並參考文章《演練:Visual Studio2010和.NET框架4》來了解有關新的功能。
以下各小節將描述應用部署方面的改善。
(一)客戶配置
.NET框架4的客戶配置支持比以前的版本更多的平台,並為您的Windows Presentation Foundation (WPF)、控制台或Windows窗體應用程序提供快速的部署體驗。
(二)進程內並行執行
此功能能夠使應用程序在同一進程中加載和啟動.NET框架的多個版本。例如,您可以在同一進程中運 行加載插件(或組件)的應用程序,程序本身基於.NET框架 2.0SP1而插件基於.NET框架4。更早一些的組件 將繼續使用早的.NET框架版本,而新的組件使用新的.NET框架版本。
二、內核新功能及改進
以下各小節將描述公共語言運行時刻庫和基礎類庫所提供的新功能和改進特征。
(一)診斷和性能
早期版本的.NET框架並沒有提供一種方法來確定一個特定的應用程序域是否正在影響其他應用程序域 ,因為操作系統的API及相關工具(如Windows任務管理器)都被精確設計到進程級。從.NET框架4開始,你 可以在每一個應用程序域中獲取處理器及內存的使用估測信息。
您可以監控每一個應用程序域的CPU和內存使用情況。可以通過托管和本機宿主API以及Windows事件跟 蹤(ETW)來進行應用程序域資源的監控。當啟用此功能後,它能夠在進程的整個生命周期過程中收集所有 應用程序域的統計信息。有關此主題,你也可以參考新屬性AppDomain.MonitoringIsEnabled的介紹。
現在,您可以為了診斷目的而訪問ETW事件以提高性能。
最後,System.Runtime.ExceptionServices.HandleProcessCorruptedStateExceptionsAttribute屬性 能夠支持在托管代碼中處理顯示崩潰的進程狀態的異常。
(二)垃圾收集
.NET框架4支持後台垃圾收集。此功能取代了以前版本中的並行垃圾收集,從而提供更好的系統性能。 有關該內容的更多的信息,請參閱文章《垃圾收集基礎》。
(三)代碼契約
代碼契約功能允許你指定那些僅通過方法或類型的簽名尚不能描述的契約信息。新命名空間 System.Diagnostics.Contracts中包含的類提供了一種獨立於語言的方法並使用前置條件、後置條件和對 象不變量等形式來表達編碼假設。這些契約通過運行時檢查能夠改進測試,支持靜態契約校驗,並支持文 檔生成。
(四)僅使用設計時互操作程序集
如今,你不再需要攜帶主互操作程序集(PIA)來部署與COM對象互操作的應用程序。在.NET框架4中,編 譯器可以從互操作程序集中嵌入類型信息,而且能夠僅選擇那些應用程序(例如,一個插件)實際使用的類 型。類型安全由公共語言運行時來保障。
(五)動態語言運行時
動態語言運行時(DLR)是一個新的運行時環境,它把一組針對動態語言的服務添加到CLR中。DLR使開發 運行於.NET框架上的動態語言更加容易,而且有利於把動態特性添加到靜態類型的語言中。為了支持DLR ,.NET框架中添加了一個新的命名空間System.Dynamic。
通過引入新的描述控制流的類型,例如System.Linq.Expressions.LoopExpression和 System.Linq.Expressions.TryExpression,表達式樹功能被進一步擴展。注意,這些新的類型僅為動態 語言運行時 (DLR)所使用,而不能夠由LINQ使用。
此外,還有一些支持.NET框架基礎設施的新類被添加到System.Runtime.CompilerServices命名空間中 。
(六)協變與反變
有幾種泛型接口和委托現在支持協變與反變功能。
(七)BigInteger和復數
新的System.Numerics.BigInteger結構是一個任意精度的整數數據類型,它支持所有標准的整數運算 ,其中包括位操作。 BigInteger可以用於任何.NET框架語言中。此外,一些新的.NET框架語言(如F#和 IronPython)都已內置了對此結構的支持。
新的System.Numerics.Complex結構用於描述一個復數,而且支持復數的算術運算和三角運算。
(八)元組
.NET框架4引入了System.Tuple類,用於創建包含結構化數據的元組對象。另外,還提供了泛型元組類 以便支持具有1至8個組件的元組。為了支持有9個或更多組件的元組對象,提供了一個泛型元組類,此類 使用7個類型參數,而第8個參數可以是任何的元組類型。
(九)文件系統枚舉功能方面的改進
.NET框架4又增加了新的文件枚舉方法,從而進一步提高訪問巨型文件目錄或遍歷大文件的應用程序的 性能。
(十)內存映射文件
.NET框架現在支持內存映射文件。你可以使用內存映射文件來編輯非常大的文件,還可以為進程間通 信創建共享內存。
(十一)64位操作系統與進程
您可以使用Environment.Is64BitOperatingSystem和Environment.Is64BitProcess屬性來標識64位的 操作系統和進程。
當你打開基鍵時,您可以使用Microsoft.Win32.RegistryView枚舉來指定一個32位或64位的注冊表視 圖。
(十二)其他新功能
以下列表描述了公共語言運行庫和基礎類庫其他方面的新功能、改進和便利之處。其中的一些功能是 基於客戶建議提供的。
為了支持文化敏感型格式,System.TimeSpan結構包括了對於ToString、Parse和TryParse方法的新的 重載,還有對ParseExact和TryParseExact方法的新的重載。
新的String.IsNullOrWhiteSpace方法能夠確定一個字符串是null,空串,還是只包含空白字符。新增 加了對 String.Concat和String.Join方法的重載,這兩個重載方法能夠串聯 System.Collections.Generic.IEnumerable集合中的成員。
String.Concat方法能夠使讓您串連一個可枚舉集合中的每一個元素,而不必預先把這些元素轉換為字 符串。
又增加了兩個新的更方便的方法:StringBuilder.Clear和Stopwatch.Restart。
新的Enum.HasFlag方法可以確定是設置一個枚舉值中的一位還是多位域(標志)。Enum.TryParse方法返 回一個布爾值,用於指示是否成功地解析了一個字符串或整數。
System.Environment.SpecialFolder枚舉中包含了幾個新的文件夾。
現在,您可以使用從System.IO.Stream類繼承的類中的CopyTo方法輕松地把一個流復制到另一個流中 。
新的重載的Path.Combine方法能夠使您合並多個文件路徑。
新的System.IObservable<(Of <(T>)>)和System.IObserver<(Of <(T>)>) 接口提供了一種更一般化的機制用於基於推技術的通知。
System.IntPtr和System.UIntPtr類現在包括了對加法和減法運算符的支持。
現在,您可以通過把類型包裝在一個System.Lazy<(Of <(T>類中來實現對任何自定義類型的 延遲初始化。
新的System.Collections.Generic.SortedSet類提供了一棵自我平衡樹,它能夠在插入、刪除和搜索 數據後維護數據的排列順序。這個類實現了新的System.Collections.Generic.ISet接口。
針對System.IO.Compression.DeflateStream和System.IO.Compression.GZipStream類的壓縮算法得到 進一步的改進,以便使已壓縮的數據不再膨脹。此外,還取消了對壓縮流的4G大小的限制。
新的重載的Monitor.Enter(Object, Boolean)方法中可以使用一個布爾類型的引用,只有當監視器成 功地進入時此變量才被自動設置為true。
您可以使用Thread.Yield方法讓調用線程把當前執行上下文讓給另一個已准備好在當前處理器上運行 的線程。
System.Guid結構現在包含了TryParse和TryParseExact方法。
新的Microsoft.Win32.RegistryOptions枚舉可以讓你指定一個不穩定的注冊表項,此項在計算機重新 啟動後便不再存在。
注冊表項不再限制為255個字符的最大長度。
三、托管擴展框架
托管擴展性框架(MEF)是.NET框架4中的一個新庫,幫助您構建可擴展的和可組合式應用程序。MEF可以 讓您指定在一個應用程序中的擴展點,給其他擴展的應用程序提供服務,以及創建可擴展應用程序所使用 的部件等。MEF還支持很容易地基於元數據搜索到可用的部件,而無需為這些部件加載相應的程序集。有 關該內容的更多的信息,請參閱《托管可擴展框架》。有關MEF類型的列表,你可以參閱 System.ComponentModel.Composition命名空間。
四、並行計算
.NET框架4針對編寫多線程和異步代碼引入了一個新的編程模式,從而極大地簡化了應用程序和庫開發 者的編程。此新的模式可以使開發人員以一種自然的方式來編寫高效的,良好粒度的,可擴展的並行代碼 ,而不必直接使用線程或線程池等。新的System.Threading.Tasks命名空間和其他相關類型支持這種新模 式。並行LINQ(PLINQ),作為LINQ toObjects的一種並行實現,能夠通過聲明性語法支持類似的功能。有 關該內容的更多的信息,請參閱《.NET框架並行程序設計》。
五、網絡編程
網絡編程方面的改進包括以下內容:
針對Windows身份驗證的安全改進體現在幾個類中,包括 System.Net.HttpWebRequest, System.Net.HttpListener,System.Net.Mail.SmtpClient,System.Net.Security.SslStream 和 System.Net.Security.NegotiateStream。在Windows 7和Windows Server 2008R2中運行的應用程序可以 使用擴展保護功能。有關該內容的更多的信息,請參閱《使用擴展保護集成Windows身份驗證》。
支持使用IPv6和Teredo進行網絡地址轉換(NAT)遍歷。有關該內容的更多的信息,請參閱《使用IPv6和 Teredo實現NAT遍歷》。
新的網絡性能計數器能夠提供有關HttpWebRequest對象的信息。有關該內容的更多的信息,請參閱《 網絡性能計數器》。
在System.Net.HttpWebRequest類中,通過重載AddRange方法支持使用64位頭部結構。在 System.Net.HttpWebRequest類中定義的新的屬性允許一個應用程序設置很多HTTP頭部。您可以使用Host 屬性設置一個HTTP 請求中的獨立於請求URI的頭部值。
提供針對System.Net.Mail.SmtpClient和相關類的安全套接字層(SSL)支持。
提供在System.Net.Mail.MailMessage類中的針對郵件頭部的改進支持。
支持在一個加密中使用空密碼。您可以使用System.Net.ServicePointManager類和EncryptionPolicy 屬性來指定加密策略。System.Net.Security.SslStream類的構造函數現在使用一個 System.Net.Security.EncryptionPolicy類作為參數。
為基於密碼的身份驗證模式,如在System.Net.NetworkCredential類中定義的基本型(Basic),摘要式 (Digest),NTLM和Kerberos身份驗證等模式,提供證書支持。為了提高安全性,現在可以把密碼視為 System.Security.SecureString類的實現,而不是簡單的System.String類的實例。
現在,能夠指定如何在System.URI和System.Net.HttpListener類中使用百分比編碼值來轉換和規范化 一個URI。有關的詳細信息,請參閱 System.Net.Configuration.HttpListenerElement, System.Configuratio.SchemeSettingElement, System.Configuration.SchemeSettingElementCollection 和System.Configuration.UriSection等幾個 類。
六、Web開發
ASP.NET版本4在以下幾個方面引入了一些新特點:
核心服務,包括一個新的允許您擴展緩存的API,支持壓縮會話狀態數據和一個新的應用程序預加載管 理器(自動啟動功能)。
Web窗體方面,其中包括為ASP.NET路由提供的更加集成化的支持,對Web標准的增強支持,更新的浏覽 器支持,為數據控件增加了一些新功能,以及為視圖狀態管理增加了一些新的功能。
Web窗體控件方面,提供了一個新的圖表控件。
MVC框架方面,包括針對視圖的新的輔助方法,對分區的MVC應用程序的支持,並提供了異步控制器。
動態數據方面,包括針對現有Web應用程序的支持,全對多對多關系和繼承的支持,對字段模板和屬性 的支持,以及增強的數據過濾功能。
在Microsoft AJAX庫中增加了針對客戶端中心型Ajax應用程序的額外支持。
Visual Web Developer中,包括了改進的針對JScript的智能感知支持,針對HTML和ASP.NET標記的新 的自動完整代碼片段支持,以及增強的CSS兼容性支持。
部署方面,為自動化的典型的部署任務增加了新的支持工具。
多目標方面,包括針對無法在.NET框架的目標版本中可用功能的更好的過濾支持。
有關這些功能的更詳細的信息,請參考《ASP.NET 4和Visual Web Developer新特征》。
七、客戶端開發
Windows Presentation Foundation
在.NET框架4中,Windows Presentation Foundation(WPF)在許多方面都發生了變化並進行了改進,包 括控件、圖形和XAML等等。有關該內容的更多的信息,請參考《WPF 4新特征概述》。
八、數據
(一)ADO.NET
ADO.NET的實體框架中提供了新功能,包括持久化透明對象(Persistence-IgnorantObjects,譯者注: 這種對象具有不必事先在DBMS中建立實體信息就可以利用實體框架的DDL生成功能將POCO對象結構轉換成 實體信息結構以存入信息庫中的能力。),在LINQ查詢功能和自定義對象層代碼生成等。有關該內容的更 多的信息,請參閱《ADO.NET新特征》。
(二)動態數據
對於ASP.NET 4來說,動態數據支持得到進一步增強,從而給你以更強大的功能快速建立數據驅動的網 站。這包括以下內容:
基於在數據模型定義的約束的自動驗證功能。
通過使用已成為動態數據項目的一部分的字段模板,能夠方便地改變在GridView和DetailsView控件中 針對相應字段生成的標記。
有關該內容的更多的信息,請參考《ASP.NET 4和Visual Web Developer新特征》。
九、通信和工作流
Windows通信基礎(WCF)實現了消息管理方面的增強並提供與Windows工作流基礎(WF)的無縫集成。WF提 供的改進體現在性能、可擴展性、工作流建模以及一個更新的可視化設計器等方面。有關該內容的更多的 信息,請參考《Windows通信基礎新特征概述》和《Windows工作流基礎新特征概述》。
請注意,.NET框架4引入了一個改進的安全模式。有關該內容的更多的信息,請參閱文章《.NET框架4 中的安全變化》(http://msdn.microsoft.com/en-us/library/dd233103(VS.100).aspx)。