zoukankan      html  css  js  c++  java
  • 利用反射方式,动态引用程序集创建类

          为更好的代码重用,公司做了一套WinForm的框架,集成数据操作\用户权限等功能,并进行相应的封装.
          基于此框架可以任意新建应用,然后通过数据库配置,使用框架调用新开发程序集中的类或窗体就可以了,基于这种想法,采用反射的实现方式.

          根据构造函数不同,可以使用默认的构造函数,或带参的构造函数(可以在数据库中配好参数类型等,具体值在调用时传入). 一小段代码

     1  private void CreatUnits(string pstrBuildingID)
     2         {
     3             string strAssembly = "Business.UI.dll";
     4             string frmName = "Business.UI.frmUnits";
     5             foreach (Form frmTemp in this.MdiChildren)
     6                 if (frmTemp.GetType().ToString() == frmName.Trim())
     7                 {
     8                     if (frmTemp.WindowState == FormWindowState.Minimized)
     9                         frmTemp.WindowState = FormWindowState.Normal;
    10                     frmTemp.Close();
    11                 }
    12 
    13             Assembly assembly = Assembly.LoadFrom(Application.StartupPath + "\\" + strAssembly);
    14             Type type = assembly.GetType(frmName);
    15             object[] args = { pstrBuildingID };
    16             Form frmChild = (Form)Activator.CreateInstance(type,args);
    17             frmChild.MdiParent = this;
    18             frmChild.WindowState = FormWindowState.Normal;
    19             frmChild.Show();
    20             frmChild.Dock = System.Windows.Forms.DockStyle.Fill;//平铺,最大化
    21         }

           注意一下 Application.StartupPath 这个最好加上,否则一但程序打开\保存文件后,再加载Assembly的路径就不对了,容易出问题.
  • 相关阅读:
    验证LeetCode Surrounded Regions 包围区域的DFS方法
    Qt Package Project 打包发布程序
    [LeetCode] Missing Number 丢失的数字
    [CareerCup] 6.4 Blue Eyes People on Island 岛上的蓝眼人
    [CareerCup] 6.3 Water Jug 水罐问题
    [CareerCup] 6.2 Dominos on Chess Board 棋盘上的多米诺
    [CareerCup] 6.1 Find Heavy Bottle 寻找重瓶子
    [CareerCup] 5.8 Draw Horizonatal Line 画横线
    Print or Cout an Unsigned Char Variable 打印无符号字符
    Kinect 学习链接
  • 原文地址:https://www.cnblogs.com/spymaster/p/812246.html
Copyright © 2011-2022 走看看