当前位置: 首页 > 编程语言 > C#

帮助理解.NET委托、事件和事件处理程序分享

时间:2023-04-10 15:42:50 C#

帮助理解.NET委托、事件和事件处理程序这几天,我在这里和这里问了几个关于委托的问题。我承认......我真的不明白代表。我真的非常想了解和掌握它们。(我可以定义它们-类型安全的函数指针-但由于我对C类型语言的经验很少,所以它实际上不起作用。)任何人都可以推荐一些以某种方式解释委托的在线资源吗?这是我怀疑VB实际上让我失望的时刻,因为它在幕后为我做了一些接线。理想的资源只是解释委托是什么,而不参考任何其他类似的东西(事件和事件处理程序),会告诉我一切是如何连接的,解释(正如我刚刚了解到的那样)委托是一种类型,是什么造就了它们一个独特的类型(可能使用一点ildasm魔法))。然后,该基础会扩展以解释委托如何与事件和事件处理程序相关联,而事件和事件处理程序本身也需要很好的解释。最后,该资源使用真实示例将所有内容联系在一起,并解释了编译器会自动发生哪些连接、如何使用它们等等。哦,是的,什么时候应该和不应该使用代理,换句话说,使用委托的缺点和替代方法。你说什么?你们中的任何人都可以指出可以帮助我开始我的精通之旅的资源吗?编辑最后一件事。理想的资源将解释如何在接口声明中使用委托。这真的让我很反感。感谢您的帮助。Seth我将从这些开始:http://www.yoda.arachsys.com/csharp/events.htmlhttp://msdn.microsoft.com/en-us/library/ms173171.aspx最简单的解释是委托允许您动态地将方法的“名称”分配给变量或将其作为参数传递(您不是在分配字符串名称,它是对分配给变量的方法本身的引用)。然后其他代码可以查看变量并调用稍后存储的方法。委托必须有一个定义(如接口),您可以为其使用delegate关键字。假设我们在某个地方有一个委托定义:publicdelegateboolNotifyFriendsDelegate(intintensity);这基本上只是说任何方法(任何地方)返回一个布尔值,并接受一个int类型的参数是delegate的一个实例。所以委托定义指定了方法必须匹配的形状或签名。然后说我们有这样一个类:vardriving=newDrivingClass();vardidWeGetThere=driving.DoTheDrivingNowPlease();如果(didWeGetThere){doOurFriendsLikeUs=thingToDoWhenWeGetThere(11);}返回doOurFriendsLikeUs;}}这个类代表一辆想象中的汽车,它有一个简单的方法让汽车开到我们朋友家。如果汽车到达我们朋友家,那么我们将要通知我们的朋友我们已经到达了……但是汽车类不知道如何通知我们的朋友。我们可能会大声播放立体声,我们可能会吹喇叭,或者我们可能会使用扩音器。由于GoVisitMyFriends方法不知道如何准确地通知我们的朋友,它需要调用代码传递对某个可以执行通知部分的方法的引用。GoVisitMyFriends不关心你给它什么方法,只要该方法的形状像NotifyFriendsDelegate定义(它必须返回boolean并接受一个int类型的参数)。现在让我们创建一个使用我们想象中的汽车的简单类:publicclassMyFunClass(){publicboolNotifyFriendsByRammingTheirHouse(inthowHard){返回rammingModule.RamFriendsHouse(howHard);}publicboolDoSomethingFun(){varcar=newMyCar();varareWeCool=car.GoVisitMyFriends(NotifyFriendsByRammingTheirHouse);返回areWeCool;}}此类包含符合NotifyFriendsDelegate签名的方法。它包含一个名为DoSomethingFun的方法,该方法创建MyCar的实例,然后调用GoVisitMyFriends方法。它传递了NotifyFriendsByRammingTheirHouse方法,这样当我们到达那里时,MyCar类就会知道我们想如何向我们的朋友表达我们的爱。这是我能想到的最简单的委托使用形式。顺便说一句:我一直发现将事件视为包含委托方法集合的特殊变量很有用。可以将任意数量(零到无穷大)的委托分配给事件,所有委托都将在事件被调用时被调用。事件只是代表可以被认为是“一件事”的群体。我最喜欢的解释来自ChrisSells:http://sellsbrothers.com/public/writing/delegates.htm查看C#编程指南-这是委托部分。以上是C#学习教程:帮助理解.NET委托、事件和事件处理器分享的所有内容。如果对你有用,需要进一步了解C#学习教程,希望大家多多关注。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处: