为什么 Assembly.GetType() 在加载不同的程序集时反映反射程序集
本文关键字:程序集 反射 GetType Assembly 加载 为什么 | 更新日期: 2023-09-27 17:56:40
我是使用反射的新手,但试图理解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 方法中指定的程序集,这不是我真正期望或认为会是一种实际行为;否则,如果返回类型是反射程序集的类型,为什么我需要指定要加载的任何文件。对我来说有点奇怪。
无论如何,如果这是正确的;并看到我的第一个示例按预期工作。那么,如何在不精确知道程序集的命名空间/和/或类名(可能与程序集的名称不同)的情况下获取任何信息,例如程序集的"方法"?
我假设反射应该允许您检查此类信息,即使您没有预先了解程序集的引擎盖下的内容,并且在运行时实例化对象的动态方面并不是"唯一"的好处。
有人可以解释一下吗?还是我做错了。
当您调用时:
Type type = assembly.GetType();
您实际上是在程序集上调用 Object.GetType()
方法,该方法返回 typeof(Assembly)
.
我怀疑你想要:
Type[] types = assembly.GetTypes();
这将返回程序集中定义的所有类型的集合。
这里的区别在于,在第一种情况下,您要求变量(assembly
)提供其类型,即Assembly
。 在第二种情况下,您向实例询问在程序集本身中定义的类型列表。
您正在调用标准 Object.GetType()
方法,该方法为您提供调用它的实例的运行时类型。
您可能正在寻找Assembly.GetTypes()
(复数)