如果我能提供帮助,我想创建一个可以在课堂上其他地方使用的对象的实例,而无需进行更多反思。
创建对象后(通过 activator 或constructorInfo,我已经阅读了两者的参数,但使用了 activator 作为它的更短例如)我必须转换它,但这不起作用。
例如:
Server instance;
public void A()
{
Assembly loaded = Assembly.LoadFrom("C:\Program Files\test2\Shared.dll");
serverType = loaded.GetType("Server");
object obj = Activator.CreateInstance(serverType, new [] { "test" });
instance = (Server)obj;
}
public void B()
{
instance.startServer();
}
这给出了一个例外:
System.InvalidCastException: [A]Server cannot be cast to [B]Server.
Type A originates from 'Shared, Version=0.0.0.0, Culture=neutral,
PublicKeyToken=2a032d22a4688508' in the context
'LoadFrom' at location 'C:\Program Files\test1\Shared.dll'.
Type B originates from 'Shared, Version=0.0.0.0, Culture=neutral,
PublicKeyToken=2a032d22a4688508' in the context 'Default' at location .
'C:\Program Files\test2\Shared.dll'
我了解引发异常的原因,但是有没有办法将实例转换为我想要的类型的服务器,即动态加载的 dll?