码迷,mamicode.com
首页 > 其他好文 > 详细

利用C# 反射设计支持可扩展插件的应用程序

时间:2014-08-05 13:45:39      阅读:159      评论:0      收藏:0      [点我收藏+]

标签:style   blog   http   color   for   2014   ar   cti   

 

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();
        }
    }

程序输出:

bubuko.com,布布扣

 

这样主应用程序可以加载由其他人员设计的插件,无需关心该插件所定义的新类型,只要插件按照给定的接口原则设计,

主程序则可无缝加载。

 

参考:《CLR via C#》第22章,第23章

jeffrey大牛实现太屌了,写的书本本经典,墙裂推荐他的书!

利用C# 反射设计支持可扩展插件的应用程序,布布扣,bubuko.com

利用C# 反射设计支持可扩展插件的应用程序

标签:style   blog   http   color   for   2014   ar   cti   

原文地址:http://www.cnblogs.com/sunbing/p/3891844.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!