2011-05-16 93 views
0

我是新來使用反射,但想了解的GetType()的行爲爲什麼Assembly.GetType()在加載不同裝配時反映了反射裝配?

我有以下幾點:

assembly = Assembly.LoadFile(@"D:\ObjectRelations.dll");    
Type type = assembly.GetType("ObjectRelations.JSHierarchyBuilder");    
MethodInfo[] methods = type.GetMethods(); 

try     
{  
foreach (MethodInfo method in methods) 
{ 
    .... List Some info, etc. 
} 
} 
catch ... 

雖然這會產生什麼包含在我的程序集的預期輸出,使用替代的

 Type type = assembly.GetType(); 

讓我與反思大會,而不是大會,是在的LoadFile方法,它是不是真的我想什麼預期或將有想到會是AP指定相關的方法突然行爲;否則爲什麼我需要指定任何文件加載,如果返回類型將是反射大會。有點兒對我很害怕。

無論如何,如果這是正確的;看到我的第一個例子按預期工作。那麼,如果沒有精確地知道大會的名稱空間/和/或類名可能不同於大會的名稱,那麼如何獲得大會的「方法」等任何信息呢?

我假設Reflection應該允許您檢查這種類型的信息,即使您沒有預知程序集的底層是什麼,並且在運行時實例化對象的動態方面不是「唯一」的好處。

有人可以解釋一下嗎?或者,我是否完全錯了。

+0

你期望它返回什麼類型? – SLaks 2011-05-16 16:37:03

+0

由於程序集不是一個類,也沒有任何方法。 – SLaks 2011-05-16 16:38:11

回答

1

您正在調用標準Object.GetType()方法,該方法爲您提供所調用實例的運行時類型。

你可能會尋找Assembly.GetTypes()(複數)

+0

謝謝大家,它實際上是有意義的Object.GetType(),但我不認爲這是因爲Assembly = Assembly.LoadFile(@「D:\ ObjectRelations.dll」);所以我期望「彙編」是對加載的程序集的引用,而不是基本對象類型的自引用。隱藏在普通的網站可以這麼說。 ;-)我只是嘗試使用GetTypes()數組,並且看到仍然需要進行一些解析,以從列表中獲取我想要的實際組裝名稱,但它絕對是一個開始。謝謝! – Mark 2011-05-16 16:50:18

3

當你撥打:

Type type = assembly.GetType(); 

你實際上是在呼籲大會Object.GetType()方法,它返回typeof(Assembly)

我懷疑你想要的東西:

Type[] types = assembly.GetTypes(); 

這將返回在組件中定義的所有類型的集合。

這裏的區別在於,在第一種情況下,您要求變量(assembly)是它的類型,即Assembly。第二,你要求實例獲得程序集本身定義的類型列表。