[英]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.dll
為test.dll
程序集的Server
類或任何其他特定類,例如: NAMESPACE.TYPE_NAME
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.