DLR 的擴充套件庫 Dynamitey

張善友 發表於 2022-11-27
MIT

.NET 在 CLR 對動態語言或者指令碼語言的支援是透過DLR 完成的, Miguel de Icaza對 DLR 的特點概括如下

  • 一個針對動態語言的共享式型別系統;
  • 一個共享的 AST,可以被語言開發人員用來建立新的動態語言;
  • 針對編譯器開發人員的輔助 / 工具類;
  • 一個通用的宿主介面,從而可以將通用指令碼語言的介面嵌入你的程式中,並且允許開發人員用一種貨多種動態語言擴充套件系統;
  • 控制檯支援,DLR 甚至提供了一個簡單的控制檯介面,用於進行互動式程式設計。

有了DLR,從c# 4.0開始,反射是不必要的,因為DLR可以使用執行時型別進行呼叫。由於動態使用DLR庫很麻煩(而不是C#編譯器為您生成程式碼),因此開源框架Dynamitey(https://github.com/ekonbenefits/dynamitey)使您可以輕鬆地快取執行時訪問編譯器將生成的相同呼叫。

Dynamitey 是一個實用程式庫,提供對 DLR 的擴充套件,包括:

  • 基於DLR的簡單快速反射,它包裝了DLR API,使得透過名稱動態呼叫方法變得更加簡單,適用於動態和poco物件。 比poco物件的反射更快。

  • 用於使用後期繫結庫中型別的乾淨語法

  • 動態柯里化

  • 元組的操作

Dynamitey 可以像dynamic關鍵字那樣呼叫它,但是使用字串作為屬性名,而不是由編譯器為您代勞,就是把對一個物件的反射呼叫轉變成對一個dynamic物件的直接呼叫:

Dynamic.InvokeGet(d,"value2");

Dynamic.InvokeSet(d, value2, value);