带有变量与不带变量的反射方法

本文介绍了一种通过动态加载DLL文件,并利用反射机制实例化特定类的方法。该方法适用于需要灵活扩展功能而不修改现有代码的情况。文章详细展示了如何使用C#语言实现这一过程,包括处理异常情况。
//<lable  title="lable"  text="基础信息查询" type="lable"  dll="InfoAdd.dll" class="InfoAdd.BackForm" method="Addform"/>
            try            {               
 Assembly a;                
a = Assembly.LoadFile(Application.StartupPath + "\\" + xmlNode.Attributes["dll"].Value);               
 Type t = a.GetType(xmlNode.Attributes["class"].Value, false, true);               
 MethodInfo method = t.GetMethod(xmlNode.Attributes["method"].Value);                
ConstructorInfo coninfo = t.GetConstructor(new Type[] { typeof(Form), typeof(XmlNode), typeof(string) });               
 object[] arg = new object[3] { mainForm, xmlNode, userId };                
object obj = coninfo.Invoke(arg);                
method.Invoke(obj, null);            
}           
 catch (Exception ee)            
{                
MessageBox.Show(ee.ToString());            
}




namespace InfoAdd
{
    public class BackForm
    {
        public XmlNode xmlNode; //传入的节点
        public string userId;
        public Form mainForm;


        public BackForm(Form mainForm, XmlNode xmlNode, string userId)
        {
            this.mainForm = mainForm;
            this.xmlNode = xmlNode;
            this.userId = userId;
        }
        public void Addform()
        {
            AddForm af = new AddForm();
            af.MaximizeBox = false;  //最大化取消
            af.MdiParent = mainForm;
            af.BringToFront();
            af.Show();
        }
    }
}


            try
        {
                Assembly a;
  //不带变量                a = Assembly.LoadFile(Application.StartupPath + "\\" + xmlNode.Attributes["dll"].Value);
                Type t = a.GetType(xmlNode.Attributes["class"].Value, false, true);
                MethodInfo method = t.GetMethod(xmlNode.Attributes["method"].Value);
                Object obj = Activator.CreateInstance(t);
                method.Invoke(obj, null);
            }
            catch (Exception ee)
            {
                MessageBox.Show(ee.ToString());
            }


评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

lyflcear

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值