问题标签 [anonymous-delegates]
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# - 是否可以获取 Action 的方法体(文本)?
我有一种情况,我已经将许多Action
对象排入队列,并且我有一个线程池在每个Action
. 但是,如果应用程序在队列为空之前关闭,我想在关闭之前记录队列中剩余的内容。
是否可以从Action
对象中获取方法体?我可以MethodBody
从 中看到该对象Action.Method.GetMethodBody()
,但我看不到将其作为字符串输出的方法。
有什么想法,还是我疯了?
编辑:还有一件事;我也想保留状态信息。也就是说,我还想保留Action
.
c# - 方法如何等待匿名委托完成?
我有以下查找联系人的代码片段(例如):
更新:
这是 ContactManager:
在触发该事件之前,该Search
方法不会返回(我没有意识到这是匿名方法/委托的标准行为)。
但是,我很困惑为匿名委托生成的代码如何在Search
完成时向该方法发出信号。
我尝试在 ContactManager.Address 属性中放置一个 Sleep(5000),因为我认为它可能来自 ContactManager 只是很快返回,但这没有什么区别。
任何人都可以解释一下吗?
c# - 何时从事件中删除匿名代表?
如果我写类似
何时(如果有的话)从事件中删除匿名代表?
作为一个简单的例子,我可以编写这个程序
我反复按“Enter”时的输出是
……等等。我可以添加该行
之后p.Foo()
但当然它没有效果,因为我正在删除一个完全不同的匿名代表。
那么这有什么关系呢?有没有办法完全删除这些匿名代表?例如,我使用以下表达式提取数据的异步 Silverlight 应用程序有什么影响
? 我假设这些类型的回调不是使用事件实现的,但当然不可能(?)说出来。
如果不仔细考虑匿名代表是否危险?
c# - 从类实例的派生类中删除(-=)Form#FormClosed 事件添加(+=)?
我有一个派生自 System.Windows.Form.Form 的“MyForm”。MyForm 处理我在构造函数中设置的处理程序的 FormClosed 事件。实例化的 MyForm 对象是否可以使用 -= 成功删除我的 MyClass#FormClosed 处理程序?如果这很重要,我正在使用匿名方法来连接我的 FormClosed 事件。
c# - 获取匿名方法的目标
以下方法是基类的一部分,它使派生类能够指定事件应通知谁。
为了只通知特定的接收者,该方法使用如下:(接收者当然必须订阅)
这只会让代表“指向”接收者。
我的问题是,当我使用匿名方法订阅 SomethingChanged 事件时,当我使用此事件通知订阅它的对象时,它不起作用。
是否有可能获取包含匿名方法的实例?还是我应该使用完全不同的方法来解决我的问题?
c# - 为什么转换为泛型类型比 C# 中的显式转换慢?
我正在用 C# 构建一个消息调度映射,并且主要是在使用一些不同的方法。我对我正在测量的性能差异感到好奇,但从 IL 来看,原因并不明显。
消息映射:
然后我有一个 Messages 的类层次结构,类似于 WPF 中的 EventArgs,例如:
和具有处理函数的观察者类:
我正在测量 2 种添加和调用处理程序的方法。我正在包装委托调用,因此我可以获得一些概念类型安全性,这就是性能差异。
方法一:监听器调用
方法2:监听器调用
这两种方法都构建了一个 MessageHandler 委托,该委托进行强制转换和相同的方法调用,但是调用使用方法 #2 构建的委托有点慢,即使生成的 IL 看起来相同。转换为泛型类型是否有额外的运行时开销?是类型约束吗?一旦解决了泛型类型,我希望 JITted 代表是相同的。
感谢您提供任何信息。
c# - 匿名代表的“动态”?
我想知道是否有可能使变量的“动态”类型适用于匿名代表。
我尝试了以下方法:
但后来我收到以下错误消息:
Cannot convert anonymous method to type 'dynamic' because it is not a delegate type
不幸的是,以下代码也不起作用:
如果我想创建一个接受任何类型的委托的方法,即使是内联声明的方法,我该怎么办?
例如:
c# - 无法从高阶函数的用法中推断出类型参数
我有以下高阶函数:
并试图这样称呼它:
编译器给了我“无法从用法中推断出类型参数”错误。但以下工作:
我想知道有什么区别?
string.IsNullOrWhiteSpace
已经是具有完全相同签名的非重载函数。
如评论中所述,以下内容也有效,但仍无法解释在这种情况下类型推断失败的原因:
c# - 这种类型的委托叫什么(C#)
我有这些代码行。
现在我怎么称呼这个声明printer del = delegate { Method(); };
。
当然它不能称为匿名方法,因为这里我有一个命名方法。
c# - 匿名委托事件侦听器会阻止垃圾收集吗?
我不确定在以下情况下是否能够对子窗口进行垃圾收集。
- 用户控件包含“显示弹出”命令
- 该命令创建一个子窗口,并为“Closed”事件添加一个匿名侦听器。
由于PopupCommand
的委托表面上仍然包含对局部child
变量的引用,因此每次调用都会PopupCommand
泄漏内存吗?或者垃圾收集器会以某种方式认识到它可以child
在关闭后处理吗?