首先,建立一個類庫,生成一個dll檔案,内部代碼如下:
using System;
namespace ClassLibrary3
{
public class Class1
{
public int Add(int x,int y)
{
return x + y;
}
}
}
生成出一個ClassLibrary3.dll 檔案,将這個檔案複制進入項目生成的exe檔案的同一個檔案夾下,然後使用下面代碼加載動态加載dll:
using System;
using System.Reflection;
namespace ConsoleApp3
{
class Program
{
static void Main(string[] args)
{
Assembly as1 = Assembly.LoadFrom("ClassLibrary3.dll");
Type t = as1.GetType("ClassLibrary3.Class1");
MethodInfo[] msi = t.GetMethods();
Console.Write( msi[0].Invoke(Activator.CreateInstance(t), new object[] { 1, 2 }));
Console.ReadKey();
}
}
}
輸出結果為:3。在這裡需要注意的一點是,如果類Class1有命名空間的話,那麼需要加上命名空間,這點在之前的反射的文章中已經指出過,在這邊再強調一下。
還有一點有些同學分不清namespace和dll的差別,其實程式集和命名空間實際上沒有什麼關系。程式集是.NET中相關類型的實體組織形式,有點類似于Windows的可執行檔案或者動态連結庫檔案。命名空間僅僅隻是為了解決類名稱的沖突問題而提供的給類“分類”的系統。一個程式集可以包含多個命名空間,而一個命名空間也可以跨多個程式集。