What is Managed Language & CLR

Managed Language & Common Language Runtime

Managed code 是什麼,請依序1 - 2 - 3 ,往下看,大概就能略之一二:

1.C#是其中一種可以將程式碼編譯成managed code的語言,其他還有COBOL, VB, F-sharp...etc

2.Managed code 經由 公共語言執行庫 Common Language Runtime (CLR)執行

3.CLR可視為一個包含執行.NET程式的引擎,以及一堆符合公共語言基礎結構的類別庫集合。CLR是一份規範的實現,幾乎所有開發的.NET程式,都基於CLR的類別庫來實現,並且在CLR提供的執行引擎上執行。

CLR的特色

  • 自動記憶體管理
  • 例外的處理
  • 標準型別 (Standard Types)
  • 安全性

標準型別

1.所有型別都繼承自Object,Object 有一個 ToString 的方法,所以每一個物件,都可以使用ToString的方法

2.型別有分三種

  • Value types
    • 所有數值型別都繼承自System.ValueType(而System.ValueType繼承自System.Object)

      也就是說,所有繼承自System.ValueType的類別都是數值型別

    • 數值型別的物件會在堆疊(stack)上分配記憶體

  • Reference types
    • 而其他非繼承System.ValueType類別都是參考型別 Reference types
    • 記憶體分配的區別參考型別會在累堆(heap)上分配記憶體
  • Pointer types – only available in unsafe code
    • unsafe code,可自行操作記憶體的程式碼,影片中非常不推薦使用,這邊就先不提

 

這邊補充說明一下數值型別 Value type與參考型別Reference type的差別

在設定變數時,數值型別的變數將獲得一個真實的資料副本,而對參考型別的變數,僅僅是把物件的參考位址賦予給變數,所以參考型別改值,是改記憶體位置上的值

請看範例:

class Ref
{
	public int Value { get; set; }
}

static void Main(string[] args)
{
	// 參考型別
	Ref r = new Ref();
	r.Value = 1;
	Ref r2 = r;
	r2.Value = 2;
	Console.WriteLine(r.Value); // output :2
	Console.WriteLine(r2.Value); // output :2

	// 數值型別
	int i = 1;
	int i2 = i;
	i2 = 2;
	Console.WriteLine(i); // output :1
	Console.WriteLine(i2);// output :2

	Console.Read();
	
}

希望經過上面的解釋,讀者都能清楚了解到 數值型別參考型別 的差異,搞懂數值型別與參考型別,算是基礎中的基礎,不然寫程式很容易出現bug 的。

 

 

一天一分享,身體好健康。

該追究的不是過去的原因,而是現在的目的。