2011-05-16 88 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。第二,你要求实例获得程序集本身定义的类型列表。