1
5
|
2
12
最简单的解释是,委托允许您动态地将方法的“名称”分配给变量或作为参数传递(您没有分配字符串名称,它是对您分配给变量的方法本身的引用)。 然后,其他代码可以查找变量,并调用存储在该变量中的方法。 委托必须有一个定义(如接口),为此,您可以使用delegate关键字。假设我们在某个地方有一个类似这样的委托定义:
这基本上就是说,任何返回布尔值并接受int类型的单个参数的方法(任何地方)都是这个委托的一个实例。因此委托定义指定了方法必须匹配的形状或签名。 那么假设我们有这样一个类:
这个类表示一辆虚构的汽车,它有一个简单的方法,可以让汽车开到我们朋友家。如果车到了朋友家,我们会通知朋友我们到了……但是汽车课不知道怎么通知我们的朋友。我们可以把立体声放得很响,吹喇叭,或者用扩音器。 由于govisitmyfriends方法不知道如何准确地通知我们的朋友,因此它要求调用代码传递一个对某些可以执行通知部分的方法的引用。GovisitMyFriends不关心您给它的方法,只要方法的形状与notifyFriendsDelegate的定义相同(它必须返回Boolean并接受一个int类型的参数)。 现在让我们创建一个使用我们的虚拟汽车的简单类:
此类包含符合NotifyFriendsDelegate签名的方法。它包含一个名为dosomethingfun的方法,该方法创建mycar的一个实例,然后调用govisitmyfriends方法。它通过notifyfriendsbyrammingtheirhouse方法,这样mycar类就可以知道,当我们到达那里时,我们是如何表达对朋友的爱的。 这是我能想到的最简单的委托使用形式。 顺便说一句:我一直觉得把事件看作包含委托方法集合的特殊变量很有用。可以为事件分配任意数量的委托(从零到无穷大),调用事件时将调用所有委托。活动只是一组可以被视为“一件事”的代表。 |
3
6
我最喜欢的解释来自克里斯销售: |
Karl · 如何引发PrintPage的事件? 2 年前 |
Daniel · LINQ从列表的dataTable中提取部分匹配 2 年前 |
limelatte · 如何在datagridview中屏蔽特定列? 2 年前 |
Orsi · 选择嵌套列表的最大值和最小值。网 2 年前 |
D T · 如何为Excel Com设置公式? 2 年前 |
Lenin · 将数组中的每个元素与另一个数组中的相应元素相乘 2 年前 |