2013-10-02 71 views
-2

比較下面同一類的兩個實例。變量instanceA是使用反射創建的,而instanceB是使用從VS2012項目直接引用的DLL創建的。當從反射調用構造函數時,我得到一個不同的C#對象實例

var a = Assembly.Load(File.ReadAllBytes(@"C:\MyFilePath.dll")); 
var t = a.GetType("Namespace.MyClassType"); 

var instanceA = Activator.CreateInstance(t); 
var instanceB = new Namespace.MyClassType(); 

問題是? 這些不等於instanceAinstanceB中的字段不同。目前我的代碼正在工作,只要我使用instanceB即可。但是,如果我只將字母「B」更改爲「A」,則生成的對象稍有不同,在稍後的階段會打破該產品。

正如你可能明白的,我的任務是使用反射而不是參考。我已經確認調用了正確的構造函數。

+1

請指定「不同」。 –

+0

你怎麼知道他們是「不同的」? – Arran

+1

特別是,它們不應該相等,因爲它們會有不同的參考地址。 – sircodesalot

回答

2

的問題是,你有不同的組件 - 在一種情況下,你已經加載的程序集只是從一個字節數組(發生存儲在磁盤上MyFilePath.dll)和其他你指由於您的項目中的參考,已加載到AppDomain中的程序集。

這不是真正清楚究竟上下文是什麼(其中不同的組件是等),但你應該看看你是如何加載組件 - 這就是問題的癥結所在,而不是Activator.CreateInstance部分。

+0

半建設......我該如何解決它? – Simeon

+1

@Simeon:別這樣做? – Will

+0

@Simeon:你提供了更多的上下文...... –

相關問題