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

反射學習系列 1-反射入門 (二) 獲取組件元數據與動態載入型別

     編輯:關於C語言

獲取組件元數據

Assembly 類別代表組件,透過反射可取得其元數據。首先需將組件載入記憶體,使用 Assembly.Load 等靜態方法。

顯示組件資訊範例

public static void Main()
{
    Assembly assem = Assembly.GetExecutingAssembly();
    Console.WriteLine("組件全名:" + assem.FullName);
    Console.WriteLine("組件版本:" + assem.GetName().Version);
    Console.WriteLine("組件初始位置:" + assem.CodeBase);
    Console.WriteLine("組件位置:" + assem.Location);
    Console.WriteLine("組件進入點:" + assem.EntryPoint);

    Type[] types = assem.GetTypes();
    Console.WriteLine("組件包含的型別:");
    foreach (var item in types) Console.WriteLine("類別:" + item.Name);
}

動態載入型別(晚期繫結)

早期繫結在編譯時期確定型別,晚期繫結在執行期透過反射動態載入。範例:

Assembly assem = Assembly.GetExecutingAssembly();
// 從組件建立實例,呼叫帶參數建構函式
Object o = assem.CreateInstance("ConsoleApplication2.Example", false,
    BindingFlags.ExactBinding, null, new Object[] { 2 }, null, null);

// 取得方法資訊並呼叫
MethodInfo m = assem.GetType("ConsoleApplication2.Example").GetMethod("SampleMethod");
Object ret = m.Invoke(o, new Object[] { 42 });
Console.WriteLine("SampleMethod returned {0}.", ret);

此技術常用於外掛架構、動態載入擴充元件等場景。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved