首页 > 代码库 > 利用C# 反射设计支持可扩展插件的应用程序
利用C# 反射设计支持可扩展插件的应用程序
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大牛实现太屌了,写的书本本经典,墙裂推荐他的书!
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。