iT邦幫忙

2021 iThome 鐵人賽

DAY 14
0
自我挑戰組

C# 與 .Net Core 雜記系列 第 14

.NET、託管代碼(managed code)、反射

託管代碼(managed code) 微軟特定用語

簡單來說 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 確切知道你撰寫的程式碼在做什麼並且可以有效管理它.

反射(Reflection)

因為在 .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));

上一篇
前談依賴注入(Dependency Injection)
系列文
C# 與 .Net Core 雜記14

尚未有邦友留言

立即登入留言