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

動態執行 C# 代碼互動機制(3):Context 注入與 ObjectHelper 設計模式

     編輯:關於C語言

修改 BuildFullCmd 注入 Context 參考

動態生成的類別新增 `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

ObjectHelper 解決賦值限制

直接 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);

模式優勢

  • 語法透明:動態代碼維持自然變量語法
  • 型別安全:泛型參數由運行時型別推導
  • 生命週期同步:Context 字典統一管理變量存續
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved