简单demo 求好心人写个C# winform的插件功能例子

如题,我最近在学winform的插件,就是说本来做好了一个软件,上面有个接口,然后开发了个插件,只要下载改插件安装(或者说放到某个目录),重新打开软件就具备了新的功能,比... 如题,我最近在学winform的插件,就是说 本来做好了一个软件,上面有个接口,然后开发了个插件,只要下载改插件 安装(或者说 放到某个目录),重新打开软件就具备了新的功能,比如 菜单栏多出一项,点击可以弹出个窗体啥的,我只是简单的举例子,不知道说的有没有无,
求个简单完整的demo
展开
 我来答
阳光的雷咩咩
推荐于2016-05-20 · TA获得超过1.4万个赞
知道大有可为答主
回答量:2.3万
采纳率:66%
帮助的人:7731万
展开全部

既然是“我最近在学”,那么应该是有学习的材料,看你后面说的要点也比较靠谱,那就不给你做winform的了。授人鱼不如授人以渔。最重要的知识点就是反射。我把其核心代码给你写了个示例。

//接口程序集,主程序和插件都要引用其dll
namespace IPLib
{
    public interface IP
    {
        //对a,b的操作
        int Op(int a, int b);
    }
}
using IPLib;

//实现的一个插件
namespace PLib
{
    public class P : IP
    {
        //返回两数和
        public int Op(int a, int b)
        {
            return a + b;
        }
    }
}
using IPLib;
using System.IO;
using System.Reflection;
//主程序,演示如何从dll文件反射出结果
namespace PluginDemo
{
    class Program
    {
        static void Main(string[] args)
        {
            //搜索某路径下所有dll
            foreach (string fn in Directory.GetFiles(@"C:\", "*.dll"))
            {
                //获取程序集
                Assembly ass = Assembly.LoadFrom(fn);
                //遍历包含的类型
                foreach (Type t in ass.GetTypes())
                {
                    //判断是否是实现了插件接口
                    if (t.GetInterface("IP") == (typeof(IP)))
                    {
                        Console.WriteLine(t);

                        int a = 1;
                        int b = 2;
                        //创建实例
                        object o = ass.CreateInstance(t.ToString());
                        //获取方法
                        MethodInfo mi = t.GetMethod("Op");
                        //执行方法
                        int c = (int)mi.Invoke(o, new object[] { a, b });
                        Console.WriteLine(c);
                    }
                }
                Console.ReadLine();
            }
        }
    }

}

 

推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式