为什么dll接口的实现是空值这段代码?

时间:2015-05-11 08:15:52

标签: c# instance activator

*喜 我将一些dll文件附加到我的程序中,并将这些名称设置为menustrip的项目。我想点击这些项目时自动运行dll。所以,这些dll文件实现了一个接口dll! 为什么在调试中实例的值为null? * 请帮助我

   foreach (var file in Directory.GetFiles(@"F:\tamrin\calcut\calcut\bin\Debug\plugin\", "*.dll"))
        {
            try
            {
                s = file.ToString();
                var asm = Assembly.LoadFrom(file.ToString());
                foreach (Type type in asm.GetTypes())
                {
                    object a = new object();
                    a = (object)asm;
                    if (type.ToString() != "ICalculate.IC")
                    {
                        string[] b = type.ToString().Split('.');
                        menu.Items.Add(b[0]);


                        var instanc = Activator.CreateInstance(type) as IC;
                        int r = instanc.GetResult(2, 4);

                    }

                }
            }

            catch (Exception ex)
            {
                string[] s2 = s.Split('\\');
                MessageBox.Show(s2[7] + " is NOT dll file");
            }

1 个答案:

答案 0 :(得分:1)

type.ToString() != "ICalculate.IC"将整理所有不属于接口ICalculate.IC的类型。这可能不是你想要的。即使您将if子句更改为==,它也只会匹配确切的类型。

如果要匹配实施IC的类型,请使用

if (typeof(IC).IsAssignableFrom(type) && type.IsClass && !type.IsAbstract)

另请注意,Activator.CreateInstance仅在有问题的类具有不带参数的构造函数(默认构造函数)时才有效。