gpt4 book ai didi

c# - C#中使用反射调用动态方法

转载 作者:行者123 更新时间:2023-11-30 13:39:12 24 4
gpt4 key购买 nike

我有一个动态实现接口(interface)的基于 DynamicObject 的类(通过 TryGet* 和 TryInvoke*)。我想调用它使用反射实现的方法。问题是它抛出 TargetException(对象与目标类型不匹配)。

正如我所说,它是动态的,因此它通过一系列连接将调用作为文本转发给另一个程序,然后该程序使用反射调用目标方法。它基本上是一个代理类。方法名称在编译时已知(因为接口(interface)),但在外部调用。

typeof(ITelescope).GetMethod(Console.ReadLine()).Invoke(prox,null);

ITelescope是接口(interface),prox是动态对象。

最佳答案

不幸的是,动态定义的方法不能通过反射获得。部分原因是它们是真正动态的——你可以有一个任何方法都有效的动态对象,所以在这种情况下反射无法正常工作。 (即:GetMethods() 会返回什么?)

如果对象是一个动态对象,最好的选择通常是将它分配给一个dynamic,并使用动态绑定(bind)来获取您的方法调用:

dynamic yourObj = prox;
yourObj.Unpark();

关于c# - C#中使用反射调用动态方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13016224/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com