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

ASP.NET 反射 App_Code 目錄下的類別與方法

     編輯:關於C#

ASP.NET 網站專案中,App_Code 目錄下的程式碼會動態編譯成獨立組件,組件名稱為 __code 或 app_code。本文示範如何透過 Assembly.Load 載入該組件,進而取得型別、建立實例、呼叫方法。

核心步驟

  1. Assembly asm = Assembly.Load("__code"); 或 Assembly.Load("app_code");
  2. Type tp = asm.GetType("Tools"); 取得型別(類別名稱不含命名空間)。
  3. Activator.CreateInstance(tp) 建立實例(非 static 方法需實例)。
  4. tp.GetMethod("Reg") 取得方法資訊。
  5. mi.Invoke(obj, null) 執行方法並取得回傳值。

完整範例

頁面代碼 Default.aspx.cs

using System;
using System.Reflection;

public partial class _Default : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
        // 載入 App_Code 動態組件
        Assembly asm = Assembly.Load("__code");
        // 或 Assembly asm = Assembly.Load("app_code");

        Type tp = asm.GetType("Tools");
        if (tp != null)
        {
            object obj = Activator.CreateInstance(tp);      // 建立實例
            MethodInfo mi = tp.GetMethod("Reg");            // 取得方法
            object ret = mi.Invoke(obj, null);              // 執行方法
            string result = ret.ToString();                 // 取得結果
            Response.Write("呼叫結果:" + result);
        }
    }
}

App_Code\Tools.cs

using System;

public class Tools
{
    public string Reg()
    {
        return "aa";
    }
}

注意事項

  • 組件名稱固定:__code(預設)或 app_code,視專案類型而定,Web Application 專案不適用(App_Code 不存在)。
  • 型別名稱:GetType 參數為類別完整名稱(含命名空間),若類別無命名空間則直接寫類別名。
  • 權限:反射需 ReflectionPermission,中信任環境可能受限。
  • 效能:頻繁反射建議快取 MethodInfo 或使用 Delegate.CreateDelegate 提升速度。

應用場景

  • 動態載入外掛/模組(將類別放入 App_Code)。
  • 依配置檔決定具體實作類別(策略模式)。
  • 單元測試中存取內部類別。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved