从调用的对象调用方法

时间:2013-07-22 14:06:46

标签: c#

我想创建一个对象的实例,我可以在我的课程中的其他地方使用,如果我可以帮助它的话,不需要经过更多的反思。

在创建对象之后(通过激活器或构造函数,我已经读取了两者的参数,但是使用了激活器作为其较短的例子)我必须抛出它但是这不起作用。

例如:

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)中将实例强制转换为服务器?

1 个答案:

答案 0 :(得分:0)

在此行:instance = (Server)obj;您需要指定类型为Server 的完全限定名称。

在程序集中运行此代码,可能会出现另一种类型Server,因此编译器会尝试通过选择本地代码来解决这种歧义。您需要指定,您要投放到Servertest.dll汇编或任何其他特定内容,例如:NAMESPACE.TYPE_NAME