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

如下图

其中文本框中的内容为类的具体路径,具体实现方法如下:
    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

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值