動態生成的類別新增 `Context` 欄位,方法簽名接受 `Context` 參數:
private String BuildFullCmd(String inputCmdString)
{
return @"
using Test;
public class DynamicClass
{
private Context m_context;
public void MethodInstance(Context context)
{
m_context = context;
" + inputCmdString + @";
}
}";
}
首次遇到 `$argname` 時替換為隨機內部變量,代碼結尾將其存入 Context:
// 概念示意
var TempArg_xxx = ...; // 替換 $argname
// ... 代碼邏輯 ...
m_context["argname"] = TempArg_xxx; // 存入 Context
直接 Cast `(T)Context[name]` 只能讀不能寫,需包裝類別實現雙向存取:
public class ObjectHelper
{
private String m_objName;
public Context Context { get; private set; }
public T Obj
{
get
{
Object obj = Context[m_objName];
return (T)obj;
}
set { Context[m_objName] = value; }
}
public ObjectHelper(Context cxt, String objName)
{
m_objName = objName;
Context = cxt;
}
}
動態代碼中:
$myVar = 123; // 寫入:ObjectHelper 存取器 setter
Console.WriteLine($myVar + 1); // 讀取:ObjectHelper 存取器 getter
編譯後實際執行邏輯:
(new ObjectHelper(m_context, "myVar")).Obj = 123;
Console.WriteLine((new ObjectHelper(m_context, "myVar")).Obj + 1);