【发布时间】:2018-04-06 06:16:15
【问题描述】:
我有以下汇编,其中包含以下数据
demo.dll
1 类
namespace demo
public class Data
{
public string FirstName {get; set;}
}
2 类
namespace demo
public class Utility
{
private List<Data> items;
public Utility()
{
items = new List<Data>();
items.add(new Data(){ FirstName = "Abc" });
}
public List<Data> GetItems()
{
return items;
}
}
现在我想使用运行时加载上面的 demo.dll 汇编并调用GetItem() 方法。
为此我可以编写以下代码
Assembly assembly = Assembly.LoadFile(Path.Combine(Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location) ,"demo.dll"));
Type Utility= assembly.GetType("demo.Utility");
Type Data= assembly.GetType("demo.Data");
MethodInfo GetItems = Utility.GetMethod("GetItems");
object utility = Activator.CreateInstance(Utility);
object returnValue = GetItems.Invoke(utility, null);
现在我想在数据类型列表中的 returnValue 上方键入 cast 并访问 FirstName 属性。
如何使用反射来实现这一点?
【问题讨论】:
-
现在我想在 'returnValue' 上方键入强制类型转换 强制类型转换是指为您提供
List<Data>引用的引用转换?你不能这样做,只有当你在编译时知道你显然不知道的类型时,它才有用/可用。你有一个没有静态类型信息的运行时对象(除了它是一个object)。您要么通过反射访问所有属性/方法,要么使用dynamic。两者本质上等同于同一件事:延迟或运行时绑定以及编译时的零类型安全,但您已经处于那个位置,所以并不是说情况变得更糟。 -
@InBetween 是的,正如你所说,除了我如何使用“returnValue”中的信息?例如,我想从列表中的所有对象中打印名字。
-
@InBetween 感谢您给我宝贵的时间。
标签: c# system.reflection