2011-03-17 99 views
0

你好,我正試圖在運行時發現並實例化一個類。程序集加載到工廠對象中。在運行時通過反射實例化一個類

它正常工作,直到這一點

Object obj = Activator.CreateInstance(
    (factory.ProxyAssembly.GetType("tempuri.org.Authorizations"))); 

,但我不能obj作爲Obj.FirstNameobj.LastName不可用,所以我試圖把它強制轉換爲適當的基礎類獲得的屬性名稱。

但下面給出的代碼不起作用。

factory.ProxyAssembly.GetType("tempuri.org.Authorizations") 
    .UnderlyingSystemType.BaseType a = 
     Activator.CreateInstance(factory.ProxyAssembly 
       .GetType("tempuri.org.Authorizations").UnderlyingSystemType); 

任何幫助表示讚賞。

+0

你不能把obj轉換成授權嗎?你究竟在做什麼,因爲可能有其他更好的方法來實現你的目標。 – TJHeuvel 2011-03-17 14:26:33

+0

到目前爲止我在即時窗口中運行它。 factory.ProxyAssembly.GetType(「tempuri.org.Authorizations」)。UnderlyingSystemType.BaseType a = Activator.CreateInstance(factory.ProxyAssembly.GetType(「tempuri.org.Authorizations」)。UnderlyingSystemType); 預期的表達式結束它顯示消息「預期的表達式結束」 – WorkerThread 2011-03-17 14:29:32

+0

@TJHeuvel我不知道類型授權。我發現它由factory.ProxyAssembly.GetType(「tempuri.org.Authorizations」)。UnderlyingSystemType – WorkerThread 2011-03-17 14:32:22

回答

1

您無法投射,您沒有在您的項目中添加作爲參考的程序集。您需要使用Reflection來獲取對象屬性。使用Type.GetProperty和PropertyInfo.GetValue。請注意,C#版本4 動態關鍵字可以大大減輕語法痛苦,建議。

+0

感謝Hans它與p = obj.GetProperty和p.SetValue()一起工作。 – WorkerThread 2011-03-17 17:06:51

1
tempuri.org.Authorizations a = (tempuri.org.Authorizations)Activator.CreateInstance(factory.ProxyAssembly.GetType("tempuri.or g.Authorizations"); 

看着鑄造(類型)。其中類型是返回的類類型。在這種情況下,類型是編譯時的事情。反射使用抽象來保護具體類型,但在這種情況下,你會需要它。除非您使用do:

a.getClass().getField("FirstName").getString(a); 
+0

嗨賈斯汀,我得到這個類型tempuri.org.Authorizations從大會。我不知道這個類型,只是名字。所以我不能使用'tempuri.org.Authorizations a'。這就是爲什麼我使用factory.ProxyAssembly.GetType(「tempuri.org.Authorizations」) .UnderlyingSystemType.BaseType在賦值的左側。 – WorkerThread 2011-03-17 14:37:53

0

您需要在實例化對象後進行強制轉換。

+0

謝謝你們。我還沒有找到一種方法來轉換爲動態運行時類型。 – WorkerThread 2011-03-17 14:46:42

相關問題