理解.NET中的CLR原理(二)
理解.NET中的CLR原理
<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />
作者:yarshray saga join(如要轉載請附上作者,謝謝!)
*我們手中的零件 ——— Assembly (裝配件)
1. 關於裝配件
*讓我們在同一個系統中執行 ——— CTS (通用型別系統)
1. 先來談談System.Object ——— 一切NET的根源
CTS中的所有類全部都是從System.Object物件派生而來。它提供了基本的操作如下:
已過載。確定兩個 Object 例項是否相等。
用作特定型別的雜湊函式,適合在雜湊演算法和資料結構(如雜湊表)中使用。
獲取當前例項的 Type。
確定指定的 Object 例項是否是相同的例項。
返回表示當前 Object 的 String。
另外CTS還定義了一組跨語言的物件。大多數編譯器都提供這些物件的別名。這裡以C#為例說明:
object ,int ,string,sbyte,byte,short,long,float,char,double,bool decimal.
以下兩個論題,由於我在論壇中答了太多遍,如果你有興趣可以去CSDN中C#版去搜尋,會找到很多,基本我都參與了。因此,這裡我只放連線。
2. 值型別和引用型別
引用型別參考:
ms-help://MS.VSCC/MS.MSDNVS.2052/csref/html/vcrefreferencetypes.htm
值型別參考:
ms-help://MS.VSCC/MS.MSDNVS.2052/csref/html/vcrefvaluetypes.htm
3. 不要把boxing and unboxing 和型別轉換混淆
參考:
ms-help://MS.VSCC/MS.MSDNVS.2052/csref/html/vclrfboxingunboxingpg.htm
*宇宙大爆炸後的產物 ——— metadata (後設資料)
1. metadata和IDL的關係:
後設資料描述了程式碼中的資料型別等一些通用語言執行時(Common Language Runtime)需要在程式碼執行時知道的資訊。後設資料使得.NET應用程式程式碼具備自描述特性,提供了型別安全保障,這在以前需要額外的型別庫或介面定義語言(Interface Definition Language,簡稱IDL)。如果,你以前有做過COM那麼你一定知道,在COM要獲取Metadata必須要從登錄檔中訪問。
後設資料是元件物件模型中關於PE的資訊, 後設資料之間是通過非標準型別的庫通訊的. 在.NET中,這些資料包含在目標檔案格式中,包括與目標檔案格式相匹配的PE以及某些確定的指導方針;他所包含的資訊像彙編的名字,版本號,語言外部的形式用作參考註釋, 內部形式也很透明,清楚的闡明瞭使用的方法,引用的函式,類等等。
通用計算機語言(CLR)使用後設資料是有專用目的的。安全性是由一個公用的祕鑰在PE的標頭檔案中管理的. CLR可以知道一些關於類和模組的資訊, 如果需要的話甚至結構的資訊也可以掌握。
CLR中類裝載器的元件也使用後設資料載彙編中定位特殊的類,本地的或者網路間的均可。 Just-in-time (JIT) 也使用了後設資料來把媒介語言(IL)轉換成可執行的程式碼。一些其他的程式也同樣在使用後設資料時受益匪淺。這裡有一個很普遍的在Windows 2000下使用Word 文件的例子。如果這個文件檔案已經完成了內容,作者,標題,或者其他的一些後設資料, 他的文字內容會像工具註釋一樣的顯示出來,當使用者揮動著滑鼠到這個文字檔案圖示的上方時。你可以使用Ildasm.exe 的功能來看PE庫中的後設資料。
2. 從Attribute開始:
後設資料的產生就是從Attribute開始,的,與COM不同的是。NET中的屬性可以自己定義。所有。NET中的Attribute均是從System.Attribute派生的。那麼我們就可以建立自己的描述資訊。加以管理,如下;
下面我們來使用上面的後設資料:
Using System.Relection;
Using System;
Namespace yarshrayAPP{
public class yarshrayConsoleApp
{
public static void <?xml:namespace prefix = st1 ns = "urn:schemas-microsoft-com:office:smarttags" />Main()
{
MemberInfor om;
om=typeof(YarshrayTest);
object o;
o=om.GetCustomAttribute(typeof(Yarshray),true);
YarshrayAttribute ya=( YarshrayAttribute)o;
Console.WriteLine(“name:”+ys.Name);
Console.WriteLine(“Age:”+ys.Age);
Console.WriteLine(“Sex:”+ys.Sex);
}
}
相關文章
- prometheus-net.DotNetRuntime 獲取 CLR 指標原理解析Prometheus指標
- CLR執行原理
- 深入理解JS中的物件(二):new 的工作原理JS物件
- .NET6 平臺系列3 .NET CLR 詳解
- .Net Core 中GC的工作原理GC
- 理解Spring(二):AOP 的概念與實現原理Spring
- .Net7 CLR的呼叫函式和編譯函式函式編譯
- 從ASP.NET Core 3.0 preview 特性,瞭解CLR的Garbage CollectionASP.NETView
- 【譯】理解Rust中的Futures(二)Rust
- .NET6中的await原理淺析AI
- Java集合詳解(二):ArrayList原理解析Java
- 限流原理解讀之guava中的RateLimiterGuavaMIT
- 理解https中的安全及其實現原理HTTP
- 深入理解 MyBatis的二級快取的設計原理MyBatis快取
- 深入理解Java中的鎖(二)Java
- .NET Core 3.0之深入原始碼理解HttpClientFactory(二)原始碼HTTPclient
- .NET Core 3.0之深入原始碼理解Configuration(二)原始碼
- .Net 7 高階玩法,自定義一個CLR執行時
- Flutter 中的圖文混排與原理解析Flutter
- Shiro原理解析(二)--過濾器的執行機制過濾器
- 【譯】.NET 7 中的效能改進(二)
- Java/.Net雙平臺核心,Jvm和CLR執行異同點JavaJVM
- 深入理解JS中的物件(三):class 的工作原理JS物件
- RocketMQ架構原理解析(二):訊息儲存MQ架構
- Volley的原理解析
- .NET Core 3.0之深入原始碼理解Kestrel的整合與應用(二)原始碼
- .Net CLR GC動態獲取函式頭地址,C++的騷操作(慎入)GC函式C++
- .Net Core自實現CLR非同步程式設計模式(Asynchronous programming patterns)非同步程式設計設計模式
- ASP.NET Core中的中介軟體及其工作原理ASP.NET
- iOS逆向之二 一個簡單的Tweak外掛原理解析iOS
- Vue中的基礎過渡動畫原理解析Vue動畫
- NET中SharpZipLib 的使用(二)【Web中壓縮與解壓】Web
- 《NET CLR via C#》---第六章(型別成員,型別的可訪問性,友元程式集,分部型別,CLR呼叫方法指令)C#型別
- Vue原理解析(十):搞懂事件API原理及在元件庫中的妙用Vue事件API元件
- 理解 HandlerThread 原理thread
- 理解 AsyncTask 原理
- 理解 IntentService 原理Intent
- PHP 的 strtotime 的原理解析PHP