簡體   English   中英

從被調用對象中調用方法

[英]Call a method from an invoked object

我想創建一個對象的實例,我可以在我的課程的其他地方使用它,如果可以幫助的話,無需經過更多的反思。

創建對象后(通過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)轉換為Server?

在這一行: instance = (Server)obj; 您需要指定Server類型的標准名稱

在運行此代碼的程序集中,probabbly存在另一種類型的Server ,因此編譯器嘗試通過選擇本地代碼來解決這種歧義。 您需要指定要test.dlltest.dll程序集的Server類或任何其他特定類,例如: NAMESPACE.TYPE_NAME

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM