简单demo 求好心人写个C# winform的插件功能例子
如题,我最近在学winform的插件,就是说本来做好了一个软件,上面有个接口,然后开发了个插件,只要下载改插件安装(或者说放到某个目录),重新打开软件就具备了新的功能,比...
如题,我最近在学winform的插件,就是说 本来做好了一个软件,上面有个接口,然后开发了个插件,只要下载改插件 安装(或者说 放到某个目录),重新打开软件就具备了新的功能,比如 菜单栏多出一项,点击可以弹出个窗体啥的,我只是简单的举例子,不知道说的有没有无,
求个简单完整的demo 展开
求个简单完整的demo 展开
1个回答
展开全部
既然是“我最近在学”,那么应该是有学习的材料,看你后面说的要点也比较靠谱,那就不给你做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();
}
}
}
}
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询