问题标签 [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.

0 投票
1 回答
183 浏览

.net - 模板化代表

我有以下代码模式:

唯一的区别是方法的返回类型以及参数的数量和类型可能会有所不同。

我想创建一个通用/模板化方法来处理除“做一些工作”部分之外的所有代码,如何实现。

0 投票
9 回答
12107 浏览

c# - 在事件声明中添加匿名空委托有缺点吗?

我已经看到一些关于这个成语的提及(包括在 SO 上):

好处很明显 - 它避免了在引发事件之前检查 null 的需要。

但是,我很想知道是否有任何缺点。 例如,它是否被广泛使用并且足够透明以至于不会引起维护头痛?空事件订阅者调用是否有明显的性能影响?

0 投票
9 回答
7056 浏览

c# - C# 事件处理(与 Java 相比)

我目前很难理解和使用 delegates 在 C# 中实现事件。我习惯了Java的做事方式:

  1. 为侦听器类型定义一个接口,该接口将包含许多方法定义
  2. 如果我对侦听器中定义的所有事件不感兴趣,请为该接口定义适配器类以使事情变得更容易
  3. 在引发事件的类中定义 Add、Remove 和 Get[] 方法
  4. 定义受保护的触发方法来完成循环添加的侦听器列表并调用正确方法的繁琐工作

我理解(并且喜欢!) - 我知道我可以在 c# 中完全一样地做到这一点,但似乎为 c# 准备了一个新的(更好的?)系统。在阅读了无数解释 c# 中委托和事件使用的教程之后,我仍然没有更接近真正理解发生了什么:S


简而言之,对于以下方法,我将如何在 c# 中实现事件系统:

^ 上述方法取自我曾经制作的一个 Java 应用程序,我正试图将其移植到 c#。

非常感谢!

0 投票
3 回答
1181 浏览

.net-2.0 - 事件处理程序行为差异.net 1.1 vs 2.0 with null delegate

不确定这里到底发生了什么,但似乎在 .NET 1.1 中未初始化的事件委托可以毫无问题地运行,但在 .NET 2.0+ 中它会导致 NullReferenceException。任何想法为什么。下面的代码在 1.1 中运行良好,没有问题,在 2.0 中它给出了 NullReferenceException。我很好奇为什么它的行为不同?发生了什么变化?

谢谢

例如

0 投票
5 回答
5249 浏览

c++ - 如何在非托管 C++ 中捕获托管异常(来自委托)?

我有非托管 C++ 通过 Marshal::GetFunctionPointerForDelegate 提供的函数指针调用托管委托。该委托有可能引发异常。我需要能够在我的非托管 C++ 中正确处理此异常,以确保诸如指针清理之类的事情,并可能将异常重新抛出到更多托管代码中。调用堆栈类似于:

托管代码 -> 非托管 C++ -> 通过委托回调托管代码(此处可以抛出异常)。

任何人都有正确处理这种情况的指针,以便可以清理非托管代码中的资源,并且可以向启动整个调用堆栈的托管代码抛出可用异常?

0 投票
13 回答
79981 浏览

c# - 在 C# 中取消订阅匿名方法

是否可以从事件中取消订阅匿名方法?

如果我订阅这样的事件:

我可以像这样取消订阅:

但是,如果我使用匿名方法订阅:

是否可以取消订阅此匿名方法?如果是这样,怎么做?

0 投票
6 回答
6861 浏览

delegates - 你能解释一下 lambda 表达式吗?

我并没有真正得到lambda 表达式。虽然它们从 ALGOL 时代就已经存在,但直到最近 Python 和 Ruby 变得非常流行时,我才开始听说它们。现在 C# 有了=>语法,我的世界 (.NET) 中的人们越来越多地谈论 lamdba 表达式。

我已阅读有关 lambda 演算的 Wikipedia 文章,但我并不是真正的数学专家。从实际的角度来看,我并没有真正理解它。我什么时候使用 lambda 表达式?为什么?我怎么知道这是我应该做的?

您能否以前后格式展示如何解决 lambda 表达式问题的示例?任何命令式语言都可以,但 C# 对我来说最容易理解。

0 投票
1 回答
4591 浏览

delegates - 将代理与 Exchange Web 服务一起使用

有没有人在 exchnage Web 服务中使用过代表?我希望一位用户能够控制其他用户在 Exchange 中的日历。我发现这个问题有点棘手,我想看看其他人是如何让它正常工作的。

0 投票
1 回答
1524 浏览

c# - C# 2.0 中是否有匿名的、类型安全的、通用的委托签名?

考虑一个泛型函数的A委托:B

然后我可以编写一个接受和调用Fun委托的函数:

(不管写是否明智invokeFun。)

我可以在invokeFun命名Fun代表的情况下写作吗?我希望这样的事情能够奏效,但它不会:

0 投票
3 回答
1615 浏览

c# - 使用部分类型信息结束异步委托调用

当使用 BeginInvoke/EndInvoke 模式编写异步方法实现时,代码可能如下所示(为了避免您猜测这是一个围绕缓存的异步包装器):

这非常有效,因为它知道委托的类型是什么,因此可以强制转换。但是,当您有两个方法时,它开始变得混乱Put,因为尽管该方法返回 void 您似乎必须将其强制转换为强类型委托以结束调用,例如

我希望有一种更简洁的方法来做到这一点,因为我唯一关心委托的是返回类型(在本例中为 void),而不是提供给它的参数。但我绞尽脑汁问办公室里的其他人,谁也想不出答案。

我知道一个解决方案是编写一个 custom IAsyncResult,但这是一项艰巨的任务,因为潜在的线程问题围绕着诸如延迟实例化之类的事情WaitHandle,我宁愿拥有这个看起来有点 hacky 的代码而不是沿着这条路线走。

关于如何在没有级联is检查的情况下结束调用的任何想法?