c#中接口实现类的动态调用实现

来源:互联网 发布:盖章软件在线制作 编辑:程序博客网 时间:2024/06/05 16:58

最近一个项目要实现接口的动态调用。一个接口有多个实现类,但是要在程序外(比如说配置文件或者数据库表里)定义到底应该掉用哪一个实现类,这样可以极大的提高程序的扩展性,调试也方便维护,多人同时使用一个程序时也可以根据不同的需要写自己的实现类。

下面讲具体的实现方法,这里主要用到的是反射的方法。一、首先先建一个接口IAnimal,该接口里面就一个Cry的方法。
    public interface IAnimal    {       string Cry();    }
二、然后定义一个Cat类实现该接口:
    public class Cat:IAnimal    {        public string Cry()        {            return "猫的叫声是:喵喵";        }    }
再添加一个Dog类来实现该接口:
     public class Dog:IAnimal    {       public string Cry()       {           return "狗的叫声是:汪汪";       }    }
三、添加一个windows窗体,并且添加动态加载该接口的具体类和具体的调用方法和结果输出,如下:

如下图

其中文本框中的内容为类的具体路径,具体实现方法如下:
    public partial class Form1 : Form    {        public Form1()        {            InitializeComponent();        }        private void bt_cat_Click(object sender, EventArgs e)        {            try            {                Type type = Type.GetType(t_cat.Text.ToString(), false);                if (type == null)                {                    MessageBox.Show("无法加载配置");                    return;                }                var obj = Activator.CreateInstance(type);                IAnimal Ia = obj as IAnimal;                t_voice.Text = Ia.Cry();            }            catch(Exception ex)            {                MessageBox.Show("加载异常");            }        }        private void bt_dog_Click(object sender, EventArgs e)        {            try            {                Type type = Type.GetType(t_dog.Text.ToString(), false);                if (type == null)                {                    MessageBox.Show("无法加载配置");                    return;                }                var obj = Activator.CreateInstance(type);                IAnimal Ia = obj as IAnimal;                t_voice.Text = Ia.Cry();            }            catch (Exception ex)            {                MessageBox.Show("加载异常");            }        }        private void bt_openform_Click(object sender, EventArgs e)        {            try            {                Type type = Type.GetType(t_form.Text.ToString(), false);                if (type == null)                {                    MessageBox.Show("无法加载配置");                    return;                }                var obj = Activator.CreateInstance(type);                Form fm = obj as Form;                fm.Show();            }            catch (Exception ex)            {                MessageBox.Show("加载异常");            }        }    }
这样就可以简单地实现类的动态调用:

这里写图片描述

  这里同样可以实现窗体的动态加载,都是通过反射来进行查找然后通过
    var obj = Activator.CreateInstance(type);
方法来进行实例化。源代码附上:

http://download.csdn.net/detail/czcl123/9475938

0 0
原创粉丝点击