• 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;
            }
        }
    }
  • 相关阅读:
    jmeter压测学习12-设置持续压测时间(调度器的使用)
    jmeter压测学习11-模拟浏览器访问web页面
    pytest文档73-pytest+yaml实现接口自动化框架之用例参数关联
    selenium+python自动化101-使用execute_script() 方法获取 JavaScript 返回值
    pytest文档72- 使用 template 替换 yaml 文件的变量
    pytest文档71-pytest+yaml实现接口自动化框架
    容器一直处于Create状态
    CAS原理与协议
    Linux route命令详解和使用示例(查看和操作IP路由表)
    Linux reboot全过程
  • 原文地址:https://www.cnblogs.com/heluo/p/2724651.html
Copyright © 2020-2023  润新知