[C#]C#學習筆記-類型反射,晚期綁定,進程,物件內容

來源:互聯網
上載者:User

C#學習筆記-類型反射,晚期綁定,進程,物件內容

羅朝輝(http://www.cnblogs.com/kesalin/)

《C#與.NET進階程式設計》讀書筆記

 

反射(Reflection)

1,程式集的中繼資料不僅可以描述一組內部類型,而且也可以描述任何一個被內部類型引用的外部類型。

2,反射是一個運行庫類型探索的過程,通過反射,我們可以通過編程得到與通過ildasm.exe顯示相同的中繼資料資訊。反射定義在 System.Reflection命名空間中,而 System.Type 類定義了大量用來檢查一個類型的中繼資料的介面。

3,我們可以使用 System.Object.GetType(), System.Type.GetType()以及typeof()運算子來擷取 Type 引用。

晚期綁定,特性

4,晚期綁定是一種建立一個給定類型的執行個體並在運行時調用其成員,而不需要在編譯時間知道它存在的一種技術。晚期綁定對程式的可擴充性非常重要。System.Activator 類是.NET晚期綁定過程中的關鍵所在,它僅僅定義了幾個成員方法,其中大多數與.NET遠端有關。

5,.NET平台運行我們使用特性(attribute)把更多的中繼資料嵌入到程式集中。簡言之,特性就是用於類型,成員,程式集或模組的代碼註解。.NET特性是擴充了抽象的 System.Attribute 基類的類類型,我們可以自該類派生出新類型來建立自訂特性。必須通過顯式的反射才能在代碼中使用特性。

 

進程,應用程式定義域和物件內容

6,進程承載一組相關的.NET程式集,而應用程式定義域(AppDomain)是對該進程的邏輯細分。一個應用程式定義域進一步被細分成多個上下文邊界,這些邊界用來分組目的相似的.NET對象。使用內容相關的概念,CLR便能夠確保恰當地控制那些帶特殊運行時要求的對象。

7,System.Diagnostics 命名空間定義了許多類型,它們允許我們以編程方式訪問進程和許多與診斷相關的類型,比如系統交易記錄,效能計數器,進程相關等。

8,.NET平台下,程式集並沒有直接承載在進程中,.NET可執行程式承載在進程的一個邏輯分區中,術語稱為應用程式定義域(AppDomain)。可見,一個進程可以包含多個應用程式定義域,每一個應用程式定義域承載一個.NET可執行程式。這與傳統的Win32進程相比,有如下好處:第一,應用程式定義域是.NET平台作業系統獨立性的關鍵特性。這種邏輯分區將不同作業系統表現載入可執行程式的差異抽象化了。第二,和一個完整的進程相比,應用程式定義域的CPU和記憶體佔用都要少得多。因此CLR載入和卸載應用程式定義域比起完整的進程來說也要快得多。第三,應用程式定義域為承載的應用程式提供了深度的隔離。如果進程中一個應用程式定義域失敗了,剩餘的應用程式定義域也能保持支援。

9,單個進程可以承載多個應用程式定義域,其中每一個程式域都和該進程(或其他進程)中其他的程式域完全徹底地隔離開來。因此,如果不使用分布式編程協議(WCF),運行在某個應用程式定義域中的應用程式將無法訪問其他應用程式定義域中的任何資料(無論是全域變數和靜態欄位)。作業系統進程只能承載預設的應用程式定義域,在進程啟動時,CLR將自動建立這個特定的應用程式定義域(預設的應用程式定義域),此後,CLR能夠根據需求建立其他的應用程式定義域。如果有需要(多數.NET工作並沒有這樣的需求),在運行時,可以使用System.AppDomain類的靜態方法在給定的進程中以編程方式建立應用程式定義域,該類也用於對應用程式定義域的低層次控制(比如載入或卸載應用程式定義域)。

10,應用程式定義域是承載.NET程式集的進程的邏輯分區,與此相似,應用程式定義域也可以進一步被劃分成多個上下文邊界(content boundary)。事實上,.NET上下文為單獨的應用程式定義域提供了一個方式,該方式能為一個給定對象建立一個“特定的家”。使用上下文,CLR可以確保在運行時有特殊需求的對象,可以通過攔截進出內容相關的方法調用,得到適當的和一致的處理。這個攔截層運行CLR調整當前的方法調用,以滿足給定物件內容的設定要求。比如,如果定義一個C#類需要自動安全執行緒(使用[Synchronization]特性),CLR將會在分配期間建立“上下文同步”。與進程定義預設的應用程式定義域一樣,每一個應用程式定義域都有一個預設的上下文。這個預設的上下文用於組合那些對上下文沒有具體的或唯一性需求的.NET對象。如果CLR判斷一個新建立的對象有特殊需求,一個新的上下文邊界將會在承載它的應用程式定義域中被建立。

11,不需要知道特定內容相關的.NET對象稱為上下文靈活對象。這些對象可以從承載它的應用程式定義域的任何位置訪問,與對象的運行時需求沒有關係。而那些需要上下文分配的對象稱為上下文綁定對象,它們必須派生自 System.ContextBoundObject基類,這個基類表面該類對象只能在其被建立的那個上下文中正常運行。一個上下文敏感的類型可以使用特定種類的.NET特性修飾-上下文特性(派生自  System.Runtime.Remoting.Contexts.ContextAttribute基類)。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.