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

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

下面讲具体的实现方法,这里主要用到的是反射的方法。

一、首先先建一个接口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窗体,并且添加动态加载该接口的具体类和具体的调用方法和结果输出,如下:

c#中接口实现类的动态调用实现_第1张图片

其中文本框中的内容为类的具体路径,具体实现方法如下:
    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("加载异常");

            }

        }
    }
这样就可以简单地实现类的动态调用:

c#中接口实现类的动态调用实现_第2张图片

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

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

你可能感兴趣的:(C#)