问题标签 [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 投票
7 回答
2452 浏览

c# - 委派任务并在完成时收到通知(在 C# 中)

从概念上讲,我想完成以下任务,但在理解如何在 C# 中正确编码时遇到了麻烦:

然后,当 WorkerMethod() 完成时,运行:

p>

任何人都可以举个例子吗?

0 投票
10 回答
2131 浏览

c# - 代表不只是简写接口吗?

假设我们有:

现在我们可以将 Bar 和 Baz 作为 Foos 折腾并调用它们的 Func 方法。

代表简化了这一点:

现在我们可以将 Bar 和 Baz 作为 Foo 代表折腾。

除了获得更短的代码之外,委托的真正好处是什么?

0 投票
13 回答
47631 浏览

.net - 在 IEqualityComparer 中包装委托

几个 Linq.Enumerable 函数采用IEqualityComparer<T>. 是否有一个方便的包装类适应 adelegate(T,T)=>bool来实现IEqualityComparer<T>?编写一个很容易(如果您忽略了定义正确哈希码的问题),但我想知道是否有开箱即用的解决方案。

具体来说,我想对Dictionarys 进行设置操作,仅使用键来定义成员资格(同时根据不同的规则保留值)。

0 投票
4 回答
613 浏览

c# - 使用关键字 new 将委托添加到事件中是否安全?

我关心的一件事是我发现了两种注册事件代表的方法。

  1. OnStuff += this.Handle;
  2. OnStuff += new StuffEventHandler(this.Handle);

第一个是干净的,执行“OnStuff -= this.Handle;”是有意义的 从事件中注销...但是对于后一种情况,我应该执行“OnStuff -= new StuffEventHandler(this.Handle);”吗?感觉就像我根本没有删除任何东西,因为我正在抛出另一个 StuffEventHandler 参考。事件是否通过引用比较委托?我担心我会在这里启动一个令人讨厌的内存池。找我?我没有对我之前注册的“新 StuffEventHandler”的引用。

做#1的缺点是什么?

做#2有什么好处?

0 投票
7 回答
13352 浏览

c# - Is there a case where delegate syntax is preferred over lambda expression for anonymous methods?

With the advent of new features like lambda expressions (inline code), does it mean we dont have to use delegates or anonymous methods anymore? In almost all the samples I have seen, it is for rewriting using the new syntax.

Any place where we still have to use delegates and lambda expressions won't work?

0 投票
3 回答
19228 浏览

vb.net - VB.NET 中作为参数的委托

背景故事:我正在使用log4net来处理我正在从事的项目的所有日志记录。可以在几种不同的情况下调用一种特定的方法——一些保证日志消息是错误的,而另一些保证日志消息是警告的。

所以,作为一个例子,我怎么能转

进入更多类似的内容:

这样我就可以调用它并将 log.ErrorFormat 或 log.WarnFormat 作为委托传递?

我将 VB.NET 与 VS 2008 和 .NET 3.5 SP1 一起使用。此外,我对代表们一般来说还很陌生,所以如果这个问题应该用不同的措辞来消除任何歧义,请告诉我。

编辑:另外,我如何在类构造函数中将委托初始化为 ErrorFormat 或 WarnFormat?会那么容易myDelegate = log.ErrorFormat吗?我想还有更多的东西(请原谅我对这个主题的无知——代表确实是我想了解更多的东西,但到目前为止他们还没有理解我的理解)。

0 投票
7 回答
513 浏览

c# - 我可以使用列表吗作为方法指针的集合?(C#)

我想创建一个要执行的方法列表。每个方法都有相同的签名。我曾考虑将代表放在通用集合中,但我不断收到此错误:

“方法”是一个“变量”,但用作“方法”

理论上,这是我想做的:

关于如何做到这一点的任何想法?谢谢!

0 投票
3 回答
11807 浏览

c# - 带委托的局部变量

显然不是一个最佳实践。有人可以解释为什么这不是最佳实践或它是如何工作的吗?任何提供解释的书籍或文章将不胜感激。

输出的值是第二个值"Modified"。编译器魔术的哪一部分使这项工作起作用?这就像跟踪堆上的值并稍后再次检索它一样简单吗?

[编辑]:鉴于一些评论,改变原句一些......

0 投票
10 回答
109364 浏览

c# - 如何在 C# 中清除事件订阅?

学习以下 C# 类:

如果有很多订阅c1'ssomeEvent事件并且我想将它们全部清除,那么实现这一目标的最佳方法是什么?还要考虑到此事件的订阅可能/是 lambdas/匿名委托。

目前我的解决方案是添加一个设置为 null的ResetSubscriptions()方法。我不知道这是否有任何看不见的后果。c1someEvent

0 投票
2 回答
5573 浏览

delegates - 如何在 C++/CLI 中使用 boost::bind 绑定托管类的成员

我在本机 C++ 类中使用 boost::signal,现在我正在 C++/CLI 中编写一个 .NET 包装器,以便我可以将本机 C++ 回调公开为 .NET 事件。当我尝试使用 boost::bind 获取托管类的成员函数的地址时,我收到编译器错误 3374,说除非我创建委托实例,否则我无法获取成员函数的地址。有谁知道如何使用 boost::bind 绑定托管类的成员函数?

为澄清起见,以下示例代码会导致编译器错误 3374: