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 的。
一天一分享,身體好健康。
該追究的不是過去的原因,而是現在的目的。