zoukankan      html  css  js  c++  java
  • Dll程序集的多态应用

    DLL程序集的多态:通俗点的说就是多个dll程序集都共同继承实现了同一个接口,但实现的方法不同;

    例如:接口IWay中有一个Bind()方法,程序集A.dll,B.dll中的类继承IWay接口并实现Bind()方法,但是Bind()实现形式不同。程序集A通过WebService绑定,程序集B通过PHP接口绑定。这样添加新的绑定方式的话只需要添加一个Dll程序集(实现了IWay接口)就可以了,不需要修改绑定的其他的操作!

    public class HelpClass
        {
    
            /// <summary>
            /// 获取指定目录下的DLL模块列表
            /// </summary>
            /// <param name="path">模块文件所在目录</param>
            public ICardWay GetFileDllList(string path, string pWay)
            {
                try
                {   
                    //DirectoryInfo用来操作目录和子目录的,如复制,创建,移动,添加等
                    DirectoryInfo modules1 = new DirectoryInfo(path);
                    //FileInfo用来操作文件或文件夹,如复制,创建,移动,添加等
                    foreach (FileInfo file in (modules1.GetFiles()))//GetFiles()获取目录中的文件
                    {
                       //string name= Path.GetFileName(file.FullName);//获取一个完整路径的文件名
                       if (pWay == name)//获取目录中想要的dll文件
                       {
                           Assembly assembly = Assembly.LoadFile(file.FullName);//下载下来dll文件
    
                           foreach (Type type in assembly.GetTypes())//GetTypes()获取程序集中定义的类型
                           {
                               if (type.IsClass) //类对象
                               {
                                   var a = type.Name; //类的名字
                                   foreach (Type t in type.GetInterfaces()) //GetInterfaces()获取类继承的所有的接口
                                   {
                                       var b = t.Name; //接口的名字
                                       if (t == typeof(ICardWay))
                                       {
                                           object obj = assembly.CreateInstance(type.FullName); //根据类名创建对象
    
                                           return obj as IWay;  //转化为接口的类型
                                       }
                                   }
                               }
                           }
                           assembly = null;
                       }
                       
                    }
                    return null;
                }
                catch (Exception ex)
                {
                    throw new Exception(ex.Message);
                }
            }
        }

    通过接口来实现返回不同的对象,进而操作不同的方法(方法名称相同)。

    namespace ConsoleApplication1
    {
        class Program
        {
            static void Main(string[] args)
            {
                Help h = new Help();
                IWay iw = h.BackObject();
                //接口对象调用方法
                iw.Run();
            }
        }
    
       public interface IWay
        {
            void Run();
        }
        public class Way : IWay
        {
            public void Run()
            {
                Console.WriteLine("接口的用法!");
            }
        }
        public class Help
        {
            public IWay BackObject()
            {
                Way w = new Way();
                return w as IWay;
            }
        }
    }
  • 相关阅读:
    dom4j 解析 xml文件1
    java 简单的动态代理例子
    标识接口的作用 (转)
    JAVA servlet输出IE6下乱码
    java时间操作函数汇总
    IE支持getElementsByClassName方法
    女朋友问我 LB 是谁?
    人类高质量 Java 学习路线【一条龙版】
    程序员作图工具和技巧,你 get 了么?
    3 分钟了解 JSON Schema
  • 原文地址:https://www.cnblogs.com/heluo/p/2724651.html
Copyright © 2011-2022 走看看