編譯執行後就得到一個傻傻的 C# 代碼解析器,也可以當一個簡單的計算器用:
3、解釋器與所解釋的代碼之間進行變量交互
如果將所解釋的代碼中的某些變量儲存下來,供給以後的代碼用,這一解釋器的功能又會強大很多。 假設這類變量名稱以$打頭,如:
$myblogname = “http://xiaotIE.cnblogs.com”
將在解釋器環境中定義(如果該變量未存在)或賦值於(如果該變量已存在)一個名為 myblogname 的字符串變量,指向字符串“http://xiaotIE.cnblogs.com”。而,System.Console.WriteLine ($myblogname)則取出並打印出字符串該變量所引用的。
簡單說來,也就是讓所解釋的代碼中能夠初始化並引用解釋器中的變量。
如何實現呢?這是本文的重點。
首先,在 Context 類中定義一個SortedDictionary儲存變量,並提供索引訪問:
public SortedDictionary<String, Object> Instances { get; set; }
public Object this[String instanceName]
{
get
{
if (Instances.ContainsKey(instanceName))
{
return Instances[instanceName];
}
else
{
return null;
}
}
set
{
if (Instances.ContainsKey(instanceName))
{
Instances.Remove(instanceName);
}
Instances.Add(instanceName, value);
}
}