加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

C#将类强制转换为接口列表

发布时间:2020-12-15 04:20:53 所属栏目:百科 来源:网络整理
导读:我正在尝试动态加载一些.dll文件.文件是插件(现在是自编写的),它至少有一个实现MyInterface的类.对于每个文件,我正在执行以下操作: DictionaryMyInterface,bool _myList; // ...code Assembly assembly = Assembly.LoadFrom(currentFile.FullName); foreach
我正在尝试动态加载一些.dll文件.文件是插件(现在是自编写的),它至少有一个实现MyInterface的类.对于每个文件,我正在执行以下操作:
Dictionary<MyInterface,bool> _myList;

    // ...code

    Assembly assembly = Assembly.LoadFrom(currentFile.FullName);
    foreach (Type type in assembly.GetTypes())
    {
        var myI = type.GetInterface("MyInterface");
        if(myI != null)
        {
            if ((myI.Name == "MyInterface") && !type.IsAbstract)
            {
                var p = Activator.CreateInstance(type);
                _myList.Add((MyInterface)p,true);
            }
        }
    }

运行此操作会导致强制转换异常,但我找不到解决方法.无论如何,我想知道为什么这根本不起作用.我正在寻找.NET Framework 3.5中的解决方案.

发生在我身上的另一件事是在上面的代码中向_myList添加新条目之前运行以下内容后在p中获取null:

var p = type.InvokeMember(null,BindingFlags.CreateInstance,null,null) as MyInterface;

这段代码是第一次加载插件的尝试,我没有找到为什么p还是null.
我希望有人能以正确的方式引导我:)

解决方法

你应该真正阅读Jon Skeet的 Plug-ins and cast exceptions,它解释了你看到的行为以及如何正确地进行插件框架.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读