首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> 關於C語言

C# 發現之旅第十四講:VB.NET 腳本引擎(上)─ 臨時組件分析與腳本方法快取

     編輯:關於C語言

編譯後組件分析流程

編譯成功取得 CompiledAssembly 後,反射掃描模組類型靜態方法並快取:


if (myAssembly != null) {
    Type moduleType = myAssembly.GetType(nsName + "." + moduleName);
    if (moduleType != null) {
        MethodInfo[] methods = moduleType.GetMethods(
            BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Static);
        foreach (MethodInfo m in methods) {
            ScriptMethodInfo info = new ScriptMethodInfo();
            info.MethodName = m.Name;
            info.MethodObject = m;
            info.ModuleName = moduleType.Name;
            info.ReturnType = m.ReturnType;
            myScriptMethods.Add(info);
            if (bolOutputDebug) Debug.WriteLine("Get vbs method \"" + m.Name + "\"");
        }
        bolResult = true;
    }
}

ScriptMethodInfo 定義


private class ScriptMethodInfo {
    public string ModuleName;
    public string MethodName;
    public MethodInfo MethodObject;
    public Type ReturnType;
    public Delegate MethodDelegate;
}
private ArrayList myScriptMethods = new ArrayList();

設計優勢

  • 啟動時一次性反射掃描,後續調用直接查找列表,效能大幅提升
  • 保存 MethodInfo 與 Delegate 雙重參考,支援兩種調用路徑
  • 記錄 ReturnType 供未來型別檢查擴充
  • 模組名稱固定為 mdlXVBAScriptEngine,命名空間 NameSpaceXVBAScriptEngine
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved