1.設計接口類:
public interface IBase{ void Somefun();}2.設計擴展插件類:
class PluginCls:IBase{ public void Somefun() { Console.WriteLine("hello ,i am derived class"); }}3.主程序設計:
class PRogram{ static void Main(string[] args) { Assembly asm = Assembly.LoadFile(@"..../PluginCls.dll"); Type[] clsTypes = asm.GetTypes();//可訪問程序集所有定義的類型 //Type[] clsTypes = asm.GetExportedTypes();//這個方法只能訪問程序集公開定義的類型 foreach (Type e in clsTypes) { if (e.IsClass && typeof(IBase).IsAssignableFrom(e))//兼容匹配 { IBase mth = (IBase)Activator.CreateInstance(e);//類實例構造 mth.Somefun();//調用插件類的實現方法 } } Console.ReadKey(); } }
程序輸出:

這樣主應用程序可以加載由其他人員設計的插件,無需關心該插件所定義的新類型,只要插件按照給定的接口原則設計,
主程序則可無縫加載。
參考:《CLR via C#》第22章,第23章
jeffrey大牛實現太屌了,寫的書本本經典,墻裂推薦他的書!
新聞熱點
疑難解答