通过反射将类转换为基类接口导致异常

时间:2011-12-12 22:11:01

标签: class c#-4.0 reflection interface casting

我通过反射以动态方式加载.NET程序集,并且获取它包含的所有类(目前为1)。在此之后,我试图将类强制转换为我100%确定该类实现的接口但是我收到此异常:无法将System.RuntimeType类型的对象强制转换为MyInterface类型

MYDLL.DLL

public interface MyInterface
{
    void MyMethod();
}

MyOtherDLL.dll

public class MyClass : MyInterface
{
    public void MyMethod()
    {
        ...
    }
}

public class MyLoader
{
    Assembly myAssembly = Assembly.LoadFile("MyDLL.dll");
    IEnumerable<Type> types = extension.GetTypes().Where(x => x.IsClass);

    foreach (Type type in types)
    {
        ((MyInterface)type).MyMethod();
    }
}

我已经删除了所有不必要的代码。这基本上就是我做的。我在this的问题中看到安迪回答的问题似乎与我的问题相同,但无论如何我都无法解决。

1 个答案:

答案 0 :(得分:3)

您正在尝试将类型为Type的.NET框架对象强制转换为您创建的接口。 Type对象未实现您的界面,因此无法强制转换。您应该首先创建对象的特定实例,例如通过使用Activator这样:

// this goes inside your for loop
MyInterface myInterface = (MyInterface)Activator.CreateInstance(type, false);
myInterface.MyMethod();

CreateInstance方法还有其他可能符合您需求的环境。