BuildFullCmd方法改變為:
private String BuildFullCmd(String inputCmdString)
{
String fullCmd = String.Empty;
fullCmd += @"
using Test;
public class DynamicClass
{
private Context m_context;
public void MethodInstance(Context context)
{
m_context = context;
" + inputCmdString + @";
}
}";
return fullCmd;
}
這樣,在動態生成的對象中,便可以引用Context對象。
對於inputCmdString 中未定義的外部變量,在第一次遇見時將$argname替換為一個隨機生成的內部變 量,在代碼的最後,將這個內部變量儲存在 Context 中。
雖然通過 (Context[argname].GetType())(Context[argname]) 便可引用外部變量 $argname,但是這 樣引用賦值時,編譯器會報錯。解決這個問題需要一個新的類:
public class ObjectHelper<T>
{
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;
}
}