![]() |
1
100
现在我们在C#中有了lambda表达式和匿名方法,我使用的委托就更多了。在C#1中,总是需要一个单独的方法来实现逻辑,使用委托通常没有意义。这些天来,我使用代理来:
|
![]() |
2
29
代表在许多方面都非常有用。 其中一个目的是使用它们过滤数据序列。在本例中,您将使用谓词委托,它接受一个参数并根据委托本身的实现返回true或false。 下面是一个愚蠢的例子——我相信你可以从中推断出更有用的东西:
|
![]() |
3
15
|
![]() |
4
12
实例 考虑“资源借用”模式。您希望控制资源的创建和清理,同时允许客户端代码“借用”中间的资源。 这声明了一个委托类型。
任何与此签名匹配的方法都可以用于实例化此类型的委托。在C#2.0中,这可以隐式地完成,只需使用方法名,也可以使用匿名方法。 此方法使用类型作为参数。注意委托的调用。
|
![]() |
5
11
委托通常可以用一种方法代替接口,一个常见的例子就是观察者模式。在其他语言中,如果您希望收到某件事情发生的通知,您可以定义如下内容:
上面是lambda语法的一个示例,也可以编写如下:
使用委托的另一个有用的地方是注册工厂函数,例如:
|
![]() |
6
10
我来得真的很晚,但我很难弄清楚今天代表们的目的,我写了两个简单的程序,它们给出了相同的输出,我认为这很好地解释了它们的目的。 NoDelegates.cs
|
![]() |
7
5
一个稍微不同的用途是加速反射;i、 代替每次使用反射,你可以使用
具有
|
![]() |
8
5
代理在您使用事件的任何时候都会被使用,这是代理工作的机制。
此外,委托对于诸如使用LINQ查询之类的事情非常有用。例如,许多LINQ查询接受委托(通常是
|
![]() |
9
4
|
![]() |
10
2
我们可以看到一个例子 here |
![]() |
11
1
我使用代理与线程通信。 例如,我可能有一个下载文件的win forms应用程序。应用程序启动一个工作线程进行下载(这会阻止GUI锁定)。工作线程使用代理将状态消息(如下载进度)发送回主程序,以便GUI可以更新状态栏。 |
![]() |
12
0
|
![]() |
13
0
第一行用法是替换观察者/可观察(事件)模式。第二,战略模式的优雅版本。可以收集各种其他用法,尽管我认为比前两种更为深奥。 |
![]() |
14
0
事件、其他anynch操作 |
![]() |
15
0
任何时候都可以封装行为,但要以统一的方式调用它。事件处理程序、回调函数等。您可以使用接口和强制转换完成类似的事情,但有时,行为不一定与 类型 对象 |
![]() |
16
0
惰性参数初始化!除了前面的所有答案(策略模式、观察者模式等),委托还允许您处理参数的延迟初始化。例如,假设您有一个函数Download(),它需要花费大量时间并返回某个DownloadedObject。此对象由存储器根据特定条件使用。通常,您会:
但是,对于委托(更准确地说,lambdas),您可以通过更改store的签名来执行以下操作,以便它接收条件和Func<项目,下载对象>然后像这样使用它:
因此,存储将仅在必要时评估委托,并根据条件执行下载。 |
![]() |
17
0
|
![]() |
18
0
数组.Sort(T[]数组,比较),List.Sort(比较)等中的比较参数 |
![]() |
19
0
据我所知,委托可以转换为函数指针。这使得在与采用函数指针的本机代码进行互操作时变得更加容易,因为它们可以有效地面向对象,即使最初的程序员没有为此做任何准备。 |
![]() |
20
0
委托用于通过引用调用方法。 例如:
|
![]() |
Emopusta · 从后端到前端的图像路径不工作 2 年前 |
![]() |
Asdrubal Hernandez · Linq查询特定数组索引出错 2 年前 |
![]() |
Niyazi Babayev · 如何在表达式中动态应用表达式? 3 年前 |
|
Dansih · .Net核心自定义身份验证方案 3 年前 |
![]() |
lolorekkk · 面板插入。NET WinForm 3 年前 |