问题标签 [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.
java - Java中的函数指针/委托?
对于我的 Java 游戏服务器,我发送数据包的操作 ID,它基本上告诉服务器数据包的用途。我想将每个动作 ID(一个整数)映射到一个函数。有没有办法在不使用开关的情况下做到这一点?
.net - 我仍然没有得到代表
使用委托不是帮助处理一些异步情况吗?我尝试了以下操作,但我的 UI 仍然挂起。你到底什么时候使用代表?
iphone - 我如何检查代表是否有效?
我正在做这样的事情:
拥有的代码MyObject
设置一个委托来接收回调函数:
然后在 中MyObject
,作为异步函数调用的结果,我将向委托发回信号:
除了我的代表由于有效的内存清理而被释放的情况外,大多数情况下似乎一切都运行良好。在这种情况下,我只想不执行回调
有谁知道检查代表是否有效的最佳方法?
我尝试了各种各样的事情,例如:
没有运气。
c# - 委托中的变量范围
我发现以下内容很奇怪。再说一次,我主要在动态语言中使用闭包,这不应该被同一个“错误”怀疑。以下使编译器不高兴:
它说:
不能在此范围内声明名为“i”的局部变量,因为它会给“i”赋予不同的含义,而“i”已在“子”范围中用于表示其他内容
所以这基本上意味着在委托中声明的变量将具有在其中声明的函数的范围。不完全是我所期望的。我什至没有尝试调用该函数。至少 Common Lisp 有一个特性,你说一个变量应该有一个动态名称,如果你真的希望它是本地的。这在创建不泄漏的宏时尤其重要,但类似的东西在这里也很有帮助。
所以我想知道其他人如何解决这个问题?
为了澄清我正在寻找一种解决方案,其中我在委托中声明的变量不会干扰委托之后声明的变量。而且我希望仍然能够捕获在委托之前声明的变量。
c# - 以多线程方式使用 BeginInvoke/EndInvoke。AsyncCallback、AsyncWaitHandle 和 IsCompleted 如何交互?
Andreas Huber 对这个问题的回答让我想到了Concurrent<T>
使用异步委托而不是线程池来实现。但是,我发现更难理解将 anAsyncCallback
传递给时发生了什么BeginInvoke
,尤其是当多个线程可以访问IAsyncResult
. 不幸的是,MSDN 或我能找到的任何地方似乎都没有涵盖这种情况。此外,我能找到的所有文章要么是在闭包和泛型可用之前编写的,要么看起来就是这样。有几个问题(我希望答案是真的,但我准备好失望了):
1) 使用闭包作为 AsyncCallback 会有什么不同吗?
(希望不是)
2)如果一个线程在等待AsyncWaitHandle
,它会
在回调开始之前或 b)在它完成之后发出信号吗?
(希望是b)
3)当回调运行时,会IsCompleted
返回什么?我可以看到的可能性:
a)true
;b) false
; c)false
在回调调用 EndInvoke 之前,true
之后。
(希望是 b 或 c)
4)DisposedObjectException
如果某个线程在调用AsyncWaitHandle
之后等待会被抛出EndInvoke
?
(希望不是,但我希望是的)。
如果答案如我所愿,这似乎应该有效:
如果问题 1-3 的答案是我所希望的,那么据我所知,这里应该没有种族条件。
c# - C# 3.0 泛型类型推断 - 将委托作为函数参数传递
我想知道为什么当 C# 3.0 编译器可以隐式地为同一方法创建委托时,当它作为参数传递给泛型函数时,它无法推断方法的类型。
这是一个例子:
我原以为我可以传递foo
给bar
并让编译器从传递的函数的签名中推断出类型,Action<T>
但这不起作用。但是,我可以在不强制转换的情况下创建一个Action<int>
from foo
,所以编译器不能通过类型推断来做同样的事情是否有正当理由?
c# - 当作为普通委托参数提供时,为什么必须强制转换 lambda 表达式
取方法 System.Windows.Forms.Control.Invoke(Delegate method)
为什么这会产生编译时错误:
然而这很好用:
当方法需要一个普通的委托时?
c# - 远程对象上的 DynamicInvoke 是否异步工作?
我继承了一些我想在这里理解的主要意大利面条代码(组合 C#/VB)。
这似乎是一个非常奇怪的情况,其中有两个连续调用来触发远程对象的事件,这是通过调用委托的 DynamicInvoke 方法来完成的,形式如下:
delegate1 和 delegate2 都引用同一个远程“订阅者”对象中的方法。
根据我在文档中可以阅读的所有内容,DynamicInvoke 看起来应该是同步的。但是我可以看到,当我在远程进程中设置断点时,delegate1 和 delegate2 引用的方法在不同的线程中同时运行。
这是另一个微软“未记录的功能”吗?我应该预料到这一点吗?关于为什么会这样的任何解释?如果它打算异步运行,DynamicInvoke 怎么会有返回值呢?
谢谢!绍尔
c# - 我可以按类型获取 C# 委托的签名吗?
如果您有委托的类型信息,是否有一种直接的方法使用反射来获取委托的参数列表?
例如,如果我声明一个委托类型如下
然后获取该委托类型的类型信息,如下所示
是否可以从该类型信息对象中检索返回类型 (double) 和参数列表 ({string, bool})?
vb.net - 动态地址
引用动态委托的最佳方式是什么。我想对从配置数据库返回的方法名称执行以下操作。