簡單來說 managed code 就是由一個 runtime 管理執行的代碼, 這裡的 runtime 以 .NET 來說就是指 CLR(Common Language Runtime), CLR 負責將其編譯為機械碼然後執行, 最重要的是執行階段時提供幾項重要服務, 例如自動記憶體管理(automatic memory management)、安全界線(security boundaries)、型別安全(type safty), managed code 由 .NET 所支援的高階語言撰寫, 經編譯器編譯後不會得到機械碼, 而是得到在 runtime 可編譯與執行的(中繼語言)Intermediate Language 碼, 得到 IL code 想執行時會由 CLR 接管, 並開始 Jusu-In-Time compile, 將 IL code 編譯成可實際在 CPU 上執行的機器碼, 這樣一來 CLR 確切知道你撰寫的程式碼在做什麼並且可以有效管理它.
因為在 .NET 上所有程式碼由 CLR 管理, 所以可以支持反射機制, 可以讓我們動態獲取物件的類型, 相關功能的類別放在 System.Reflection 命名空間中
using System.Reflection;
class Car
{
public string color {get; set;}
public void run()
{
color = "紅色";
Console.WriteLine("車子變紅色並跑起來");
}
}
Type type = typeof(Car); // 使用 typeof 取得 類型信息
// 利用 System.Reflection 下的 Activator 類
object o = Activator.CreateInstance(type);
MethodInfo method = type.GetMethod("run");
method.Invoke(o, null);
PropertyInfo color = type.GetRuntimeProperty("color");
Console.WriteLine(color.GetValue(o));