问题标签 [methodinfo]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c# - 针对委托检查 MethodInfo
如何确定 MethodInfo 是否适合不同的委托类型?
编辑:我得到了一个 MethodInfo 对象,想知道它是否适合委托接口。除了明显的
c# - 为什么 VS2010 总是因 MethodInfo.Invoke 异常而中断?
我对 MethodInfo.Invoke(o,null) 进行了尝试/捕获,并且 VS2010 设置为从不中断异常,但不幸的是调试器继续在 Invoked 方法内中断。该方法是静态的,我已经安装了 Phone Developer Beta。
这是错误还是开发人员错误?
谢谢!!
c# - 我将如何使用反射来调用具有某个自定义属性的所有方法?
我有一堂课,里面有很多方法。
其中一些方法由自定义属性标记。
我想一次调用所有这些方法。
我将如何使用反射来查找该类中包含此属性的所有方法的列表?
.net - 你能得到一个 Func(或类似的)来自 MethodInfo 对象?
我意识到,一般来说,使用反射会影响性能。(实际上,我本人根本不喜欢反思;这是一个纯粹的学术问题。)
假设存在一些如下所示的类:
在这里忍受我。我知道如果我有一个MyClass
被调用的实例x
,我可以调用x.GetName()
。此外,我可以将Func<string>
变量设置为x.GetName
.
现在这是我的问题。假设我不知道上面的类被调用MyClass
;我有一些对象,x
但我不知道它是什么。我可以通过执行以下操作来检查该对象是否具有GetName
方法:
假设getName
不为空。那么我不能进一步检查是否getName.ReturnType == typeof(string)
和getName.GetParameters().Length == 0
,并且在这一点上,我不是很确定我的getName
对象表示的方法肯定可以以Func<string>
某种方式强制转换为 a 吗?
我意识到有一个MethodInfo.Invoke
,我也意识到我总是可以创建一个Func<string>
类似的:
我想我要问的是是否有任何方法可以从一个MethodInfo
对象转到它所代表的实际方法,从而在过程中产生反射的性能成本,但在那之后能够直接调用该方法(通过,例如, aFunc<string>
或类似的东西)没有性能损失。
我所设想的可能看起来像这样:
(我意识到这不存在;我想知道是否有类似的东西。)
.net - 如何从 MethodInfo 创建 Action 委托?
我想从 MethodInfo 对象中获取操作委托。这可能吗?
c# - 无法捕获的异常,第 2 部分
更新:我已经提交了关于 Microsoft Connect 的错误报告:https ://connect.microsoft.com/VisualStudio/feedback/details/568271/debugger-halting-on-exception-throw-inside-methodinfo-invoke#details
如果您可以在您的机器上重现此问题,请为该错误投票,以便修复它!
好的,我已经进行了一些测试,并将问题简化为非常简单的问题:
一世。在引发异常的新类中创建一个方法:
ii. 在其他地方创建一个指向此方法的 MethodInfo:
iii. 在 try/catch 块中包装对 Invoke() 的调用:
iv. 在没有调试器的情况下运行程序(工作正常)。
v. 现在用调试器运行程序。当异常发生时,调试器将停止程序,即使它被包装在试图忽略它的 catch 处理程序中。(即使你在 catch 块中放了一个断点,它也会在到达之前停止!)
事实上,当您在没有调试器的情况下运行它时也会发生异常。在一个简单的测试项目中,它会在其他级别被忽略,但如果您的应用程序有任何类型的全局异常处理,它也会在那里被触发。 [看评论]
这让我非常头疼,因为它不断触发我的应用程序的崩溃处理程序,更不用说尝试调试的痛苦了。
.net - .NET MethodInfo 缓存可以清除或禁用吗?
根据MSDN,调用Type.GetMethods()
将反映的方法信息存储在MemberInfo
缓存中,因此不必再次执行昂贵的操作。
我有一个扫描程序集/类型的应用程序,寻找与给定规范匹配的方法。问题是内存消耗显着增加(尤其是在引用大量程序集的情况下),因为 .NET 挂在方法元数据上。
有没有办法清除或禁用此MemberInfo
缓存?
c# - 遍历ac#方法并解析方法体
在 c# 中遍历方法信息的最简单方法是什么?
我想遍历方法体并找到字段引用等并检索类型。
在 System.Reflection 中有:
这有点低级,在我能够遍历身体之前需要“一些”工作。
我知道 Cecil 存在,但是用 cecil 加载内存程序集时存在问题。我正在使用的程序集并不总是“在磁盘上”,它可以是从例如编译的内存程序集。嘘,如果不将程序集临时写入磁盘,我就没有一个干净的解决方案。
有什么其他的选择呢?
c# - 使用 Reflection.Emit 在堆栈上使用 MethodInfo 实例调用方法
我正在使用 Reflection.Emit 来构建一个数学表达式解析器(例如2+2
)。一个类接收一个中缀表达式(例如2+2
),将其转换为一个后缀表达式(例如2 2 +
),然后另一个类将该后缀表达式编译为 IL 并创建一个DynamicMethod
. 从那里,可以像在编译时以相似的速度创建表达式一样评估表达式。
这个编译器还支持隐式乘法,所以像这样x(2 + 2)
计算为x * (2 + 2)
现在,我正在尝试实现用户定义的函数(例如f(x)
)。当我试图区分隐式乘法(如上所示)和用户定义的函数时,就会出现问题。这方面的一个例子是,如果用户输入x(5)
,我如何知道他们是要乘以x
,5
还是x
使用参数调用函数5
?
为了解决这个问题,在前一种情况下,编译器将一条if
语句插入到 IL 流中。它调用一个函数来确定该函数是否使用标识符定义x
。如果有,则MethodInfo
通过out
变量和局部变量将实例插入堆栈。
我的实际问题是,是否可以使用堆栈上的实例执行与编译期间MethodInfo
调用速度相当的方法?IlGenerator.Emit(OpCodes.Call, MethodInfo)
谢谢。
c# - System.Reflection.MethodInfo.Invoke 和多线程
嗨,我如何使用带有线程的参数调用 System.Reflection.MethodInfo.Invoke()。
例如..
假设我有一个方法允许您传入一个表示类名的字符串并动态调用相应的类方法,现在我想用线程调用这个 Methodinfo.invoke,我不知道该怎么做,因为我正在调用调用带参数。给出的代码片段 meblow 。感谢您的帮助