65.9K
CodeProject 正在变化。 阅读更多。
Home

委托:这是什么?

starIconstarIcon
emptyStarIcon
starIcon
emptyStarIconemptyStarIcon

2.97/5 (43投票s)

2003年8月18日

2分钟阅读

viewsIcon

106059

downloadIcon

1262

本文包含对委托概念的解释。

为什么写这篇文章

首先,我想为我蹩脚的英语道歉。但是,我将尽一切可能使这篇文章易于理解。

其次,我想解释我为什么写这篇文章。前段时间,我和一个人进行了讨论。这个人正在学习C#编程。他要求我解释关于委托和事件。实际上,我非常惊讶。有很多好的C#书籍、有用的链接、源代码示例等等。然而,在我们的讨论中,我了解到这个人阅读了关于C#编程的书籍,浏览了合适的网络资源,研究了好的代码示例,但仍然对委托有疑问!

当前的代码示例是我们讨论的结果。这个例子非常简单,可以说是很傻。但是,它帮助我的对手理解了委托的本质。我希望这个例子和注释对其他正在学习C#编程的人有用。

文章本身

我建议在阅读本文之前下载演示项目。这是一个C#控制台应用程序。解压下载的文件,然后单击SLN文件以在.NET Studio中启动该项目。

C#委托是一个回调函数。换句话说,委托是一种提供从类服务器到类客户端的反馈的方式。

C#委托比“标准”回调更智能,因为它允许定义从类服务器传递到类客户端的严格参数列表。

在我们的示例中,类服务器的名称为DataHolder。它保存数据项的集合。数据项在类DataItem中定义。任何数据项都有两个属性:NameColor。此外,DataHolder包含一种方法,该方法允许搜索数据集合以找到满足搜索条件的数据项。此方法包含两个参数。第一个参数定义搜索条件。第二个参数定义在满足搜索条件时要调用的方法。

非常重要的一点是,类服务器从头到尾循环遍历所有数据集合。如果数据项满足搜索条件,类服务器将调用在类客户端中定义的方法。从类服务器到类客户端的回调次数与集合中满足搜索条件的数据项数量相同。

MainClass是一个类客户端。它创建DataHolder类(lst)的实例和类型为“CallBack”的委托的实例。委托实例(procedure01)包含信息:类服务器必须在类客户端中调用的用户定义的方法(PrintSearchResult),以及类服务器必须传递给此用户定义的方法的参数。传递给类客户端的用户定义方法的参数列表在委托声明中定义。当然,用户定义方法中的参数列表必须与委托声明中的参数列表完全匹配。

这是C#委托的主要思想。我建议在调试器中运行示例项目,以便获得逐步执行的审查。

© . All rights reserved.