zoukankan      html  css  js  c++  java
  • 关于C#反射机制,自己写的

    以下代码是我的项目中拷贝出来的,已通过测试成功,代码如下:

    //首先建立一个抽象类,做为基类,试过用接口,但没有成功,所以放弃
    //抽象类:

    public abstract class IMCU05SConfig
    {
    public abstract bool AddMcu(HJEquipType equiptype, ZHNode node);
    public abstract bool EditMcu(HJMCU mcu);
    }

    因为项目需要,是利用动态加载DLL的方式,需要自定义配置窗体,所以新建一个类库,将窗体写在当中,然后实现抽象类用于调用,代码如下:

    public class McuConfig : IMCU05SConfig
    {

    public override bool AddMcu(HJEquipType equiptype, ZHNode node)
    {
    FrmMcuConfig fmc
    = new FrmMcuConfig();
    fmc.ShowDialog();
    return true;
    }

    public override bool EditMcu(HJMCU mcu)
    {
    FrmMcuConfig fmc
    = new FrmMcuConfig();
    fmc.ShowDialog();
    return true;
    }
    }

    FrmMcuConfig就是需要调用的窗体,

    用这个类库生成DLL,在主项目中进行调用,在调用前,程序先将dll文件放在程序启动目录下

    调用代码如下:

    Assembly assembly = Assembly.LoadFile(Application.StartupPath + "\\" + fst.EquipType.ConfigDLL);
    Type[] types
    = assembly.GetTypes();
    for (int i = 0; i < types.Length; i++)
    {
    if (types[i].IsSubclassOf(typeof(IMCU05SConfig)))
    {
    ConstructorInfo ci
    = types[i].GetConstructor(new Type[0]);
    IMCU05SConfig sport
    = (IMCU05SConfig)ci.Invoke(new Object[0]);
    bool b = sport.AddMcu(fst.EquipType, fsn.Node);
    return;
    }
    }
    MessageboxX.ShowError(fst.EquipType.EquipName
    + "类型的管理模块Dll文件引用错误!!请检查 " + fst.EquipType.EquipName + "设备类型");
    return;
    }
    成功调用

  • 相关阅读:
    Redis 代理 twemproxy
    redis sentinel 集群监控 配置
    RabbitMQ 消息队列 配置
    codis 新版本 CodisLabs 编译安装
    CentOS7 开源跳板机(堡垒机) Jumpserver
    tomcat 优化配置 java-8 tomcat-7
    CentOS 7 安装配置 NFS
    CentOS 7 x64 安装 Ceph
    自动化运维 Ansible
    Java之数据类型讲解
  • 原文地址:https://www.cnblogs.com/yannis/p/2067098.html
Copyright © 2011-2022 走看看