理解.NET中的CLR原理(三) (轉)

worldblog發表於2007-12-15
理解.NET中的CLR原理(三) (轉)[@more@]

理解中的CLR原理

:namespace prefix = o ns = "urn:schemas--com::office" />

作者:yarshray saga join(如要轉載請附上作者,謝謝!)

*讓我們的語言可以交流  ——— CLS (公共語言)

1. 統一標準的制定:

ectratio="t">

了幫助建立相容 的語言,Microsoft 設計了公共語言規範 (CLS)。每種語言要使用 .NET Framework 和公共語言執行庫,以及與用其他語言編寫的進行互操作,就必須提供 CLS 所描述的功能。如果一種語言實現了必需的功能,那麼它就被稱為相容 .NET。每種相容 .NET 的語言都支援相同的資料型別,使用相同的 .NET Framework 類,編譯為相同的 MSIL,並且使用相同的公共語言執行庫管理過程。因此,各種相容 .NET 的語言之間沒有優劣之別。開發人員可以自由地為特定的元件選擇最好的語言同時又不損失該平臺的能力和自由度。另外,使用一種語言編寫的元件也能夠很容易地與用另外一種語言編寫的元件進行互操作。例如,您可以用 編寫一個從用 編寫的基類繼承而來的類。CLS 已經被提交給 ECMA 進行標準化,這鼓勵許多語言開發人員為許多語言建立相容 .NET 的版本。在撰寫本文時有 20 多種相容 .NET 的語言正在開發中。

MSDN是我覺得比較全面的一個介紹:

ms-help://MS.VSCC/MS.MSDNVS.2052/cpgu/html/cpconwhatimmonlanguagespecification.htm

*在動態中互動  ——— Reflection (反射)

CLS載入器管理應用域。這種管理包括將每個程式集載入到相應的應用程式域以及控制每個程式集中型別層次結構的佈局。

Assembly包含模組,而模組包含型別,型別又包含成員。反射則提供了封裝程式集、模組和型別的。您可以使用反射動態地建立型別的例項,將型別繫結到現有物件,或從現有物件中獲取型別。然後,可以型別的方法或訪問其欄位和屬性。反射通常具有以下用途:

  • 使用 Assembly 定義和載入程式集,載入在程式集清單中列出的模組,以及從此程式集中查詢型別並建立該型別的例項。
  • 使用 Module 瞭解如下的類似資訊:包含模組的程式集以及模組中的類等。您還可以獲取在模組上定義的所有全域性方法或其他特定的非全域性方法。
  • 使用 ConstructorInfo 瞭解如下的類似資訊:構造的名稱、引數、訪問修飾符(如 publicprivate)和實現詳細資訊(如 abstractvirtual)等。使用 Type 物件的 GetConstructors 或 GetConstructor 方法來呼叫特定的建構函式。
  • 使用 MethodInfo 來了解如下的類似資訊:方法的名稱、返回型別、引數、訪問修飾符(如 publicprivate)和實現詳細資訊(如 abstractvirtual)等。使用 Type 物件的 GetMethods 或 GetMethod 方法來呼叫特定的方法。
  • 使用 FieldInfo 來了解如下的類似資訊:欄位的名稱、訪問修飾符(如 publicprivate)和實現詳細資訊(如 static)等;並獲取或設定欄位值。
  • 使用 EventInfo 來了解如下的類似資訊:事件的名稱、事件處理程式資料型別、自定義屬性、宣告型別和反射型別等;並新增或移除事件處理程式。
  • 使用 PropertyInfo 來了解如下的類似資訊:屬性的名稱、資料型別、宣告型別、反射型別和只讀或可寫狀態等;並獲取或設定屬性值。
  • 使用 ParameterInfo 來了解如下的類似資訊:引數的名稱、資料型別、引數是輸入引數還是輸出引數,以及引數在方法簽名中的位置等。

System.Reflection.Emit 名稱空間的類提供了一種特殊形式的反射,使您能夠在執行時構造型別。

反射也可用於建立稱作型別的應用程式,它使能夠選擇型別,然後檢視有關選定型別的資訊。

反射還有其他一些用途。 等語言使用反射來構造符號表。System.Runtime.Serialization 名稱空間中的類使用反射來訪問資料並確定要持久儲存的欄位。System.Runtime.Remoting 名稱空間中的類透過序列化來間接地使用反射。

1. 從Reflection 開始

參考System.Reflection 名稱空間

ms-help://MS.VSCC/MS.MSDNVS.2052/cpref/html/frlrfSystemReflection.htm

2. 動態建立Assembly

下面我做一個事例程式碼首先我下一個程式碼然後在用動態檢視資訊:

using System;

public class SayName {

   private const String SayName = "I’m Yarshray";

   

  public SayMyName() {

  }

 

  public void OutPutName() {

   

  Console.WriteLine(SayName);

  }

}

 

using System;

using System.Reflection;

public class YarshrayReflection {

  public static void Main() {

   

  Assembly as  = Assembly.Load("SayMyName");

   

  Type t = as .GetType("SayMyName");

   

  MethodInfo mi = t.GetMethod("OutPutName");

   

  o  = Activator.CreateInstance(t);

   

  mi.Invoke(o);

  }

}

 

*屬於我們自己的空間  ———  NameSpace  (名稱空間)

1. 也談名稱空間:

關於名稱空間我想不用我多說。它相當一個可以包含類的夾。但要注意一點,儘量把相關的類放到同一個名稱空間中。因為那樣比較方便維護。

如:

namespace YarshrayTools

{

  using System;

使用namespace可以方便的定義名稱空間,上面我定義了一個名為YarshrayTools的名稱空間,using可以很方面的引入名稱空間

public class YarshrayClass

{

這樣就把類放入了名稱空間中。引用名稱空間中的類的方法如下:

YarshrayTools.YarshrayClass ys=new YarshrayTools.YarshrayClass();

你也許,注意到了,我使用的是帶名稱空間的引用。這種方式叫做 Full Qunalfied Name(完全限定名),當然,如果你在程式碼中using YarshrayTools

那麼就不需要這樣做了。

附錄:

。NET工具介紹

工具

說明

允許使用 檢視和操作全域性程式集快取的內容。

從一個或多個檔案(資原始檔或 Microsoft 中間語言 (MSIL) 檔案)生成一個帶有程式集清單的檔案。

讀取程式集內的後設資料並向登錄檔新增必要的項,以便使 客戶端能夠透明地建立 .NET 框架類。

顯示失敗的程式集繫結的詳細資訊。這些資訊有助於您診斷 .NET 框架無法在執行時找到程式集的原因。

全域性程式集快取工具 (Gacutil.exe)

允許檢視和操作全域性程式集快取和快取的內容。由於 Shfusion.dll 提供了類似的功能,所以可以從構造指令碼、生成檔案檔案和批處理檔案使用 Gacutil.exe。

程式工具 (Installutil.exe)

允許透過執行指定程式集的安裝程式元件,安裝和解除安裝資源。

工具 (Storeadm.exe)

為當前登入的使用者列出或刪除所有的現有儲存區。

本機映像生成器 (Ngen.exe)

從託管程式集建立本機映像,並將其安裝在本地的本機映像快取中。

.NET 框架工具 (Mscorcfg.msc)

提供圖形介面以管理 .NET 框架策略和使用處理服務的應用程式。此工具還允許管理和配置全域性程式集快取中的程式集。

透過載入、註冊程式集並將型別庫生成、註冊和安裝到現有的 COM+ 1.0 應用程式中,將託管類新增到 元件服務中。

psudsutilitysoapsudsexe.htm">Soapsuds 工具 (Soapsuds.exe)

使用一種稱為“遠端處理”的技術幫助您編譯與 XML services 進行通訊的客戶端應用程式。

從公共語言執行庫程式集生成型別庫。

將 COM 型別庫中發現的型別定義轉換成託管後設資料格式的等同定義。

sdescriptionlanguagetoolwsdlexe.htm">Web 服務描述語言工具 (Wsdl.exe)

從 Web 服務描述語言 (WSDL) 協定檔案、XML 架構定義 (XSD) 架構檔案和 .discomap 發現文件為 XML Web services 和 XML Web services 客戶端生成程式碼。

發現位於 Web 伺服器上的 XML Web services 的 URL,並將與每個 XML Web services 相關的文件儲存到本地上。

生成的 XML 架構應遵從 WWW 聯合會 () 提出的 XSD 語言。此工具可生成公共語言執行庫類和 XSD 架構檔案的 DataSet 類。

工具

工具

說明

Microsoft CLR 偵錯程式 (gCLR.exe)

使用圖形介面提供除錯服務,以幫助應用程式開發人員查詢和修復針對執行庫的各類程式中的錯誤。

gercordbgexe.htm">執行時偵錯程式 (Cordbg.exe)

使用公共語言執行庫“除錯 API”提供命令列除錯服務。用於查詢和修復針對執行庫的各類程式中的錯誤。

推薦文章參考

http://www.zdnet.com.cn/developer/tech/story/0,2000081602,39056220-1,00.htm

終於完成了,希望對大家會有點幫助。好了,再見各位,下次見。(完)

 

 

 


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10752043/viewspace-993951/,如需轉載,請註明出處,否則將追究法律責任。

相關文章