委托的用法

本文关键字:用法 | 更新日期: 2023-09-27 17:59:22

我看到委托用于自定义事件。就而言

delegate string FuncRef(string Val);
FuncRef fValue = GetFieldName;
fValue("hello");

我在这里所做的只是声明delegate,并为delegate分配一个函数名,并在需要时调用fValue("hello");

而不是通过委托调用CCD_ 2,我可以直接调用它。所以我只想知道为什么我应该使用委托来调用函数,因为我们可以直接调用函数。。。。通过委托调用任何函数的优点是什么。

所以请告诉我,除了事件处理之外,在什么样的场景中需要使用委托。请用示例代码指导我,并模拟一种情况,即除了事件处理之外,我需要通过委托调用函数。请给我看一些现实生活中的场景,我们必须通过委托来调用函数。

委托的用法

使用委托而不是直接调用函数的原因与执行的原因相同

var taxRate = 0.15;
var taxAmount = income * taxRate;

而不是

var taxAmount = income * 0.15;

换句话说:使用变量来保存对可调用实体的引用(委托正是这样)允许您编写代码,根据传递给它的参数(我们正在传递的延迟门的)来更改它的行为。这意味着更灵活的代码。

对于使用委托的代码示例,您可以查看LINQ(当然),但也有与任何语言相关的"委托101"示例:过滤列表。

delegate string FuncRef(string Val);
FuncRef fValue;   // class member
if (condition1)
    fValue = GetFieldName1;
else if (condition2)
    fValue = GetFieldName2;
else
    fValue = GetFieldName3;
// Another function
fValue("hello");

Microsoft关于C#委托的教程代码提供了另一个有趣的用例。在他们的例子中,一个名为Bookstore的对象有一个ProcessPaperbackBooks方法,该方法接受一个图书处理委托并将其应用于类中的每个项目。

最酷的部分是,如果你需要一个收集商店中所有书籍的所有ISBN的方法,你不需要更改bookstore类中的任何内容,只需要定义一个作用于书籍的函数,并将其传递到ProcessPaperbackBooks方法中。委托的好处将发生,你的新功能将应用于书店中的每一件商品。小吃,不是吗?

http://msdn.microsoft.com/en-us/library/aa288459(v=vs.71).aspx

基本上是您希望能够在运行时指定应调用哪个函数的任何地方。

异步BeginInvoke/EndInvoke模式就是一个很好的例子;回调是通过委托指定的。

很快:您可以组合使用委托和事件成员,例如,将事件处理程序分配给以前不知道的类,按钮类知道何时必须触发点击事件,但还不知道,在内部,您将把mybutton_click处理程序绑定到它。

Linq to对象广泛使用委托:

myAnimals.Where(animal => animal.CanSwim)

提供给Where方法(animal => animal.CanSwim)的参数是一个lambda表达式,该表达式转换为应用于myAnimals中所有元素的委托。

我使用委托的一个地方是我的输入处理程序(C#,XNA)

我有一个public void OnKeyboardPress()委托,当按下某些键时,它会绑定到各种函数。

输入就是一个很好的例子;而不是轮询它(即,你每次更新"它准备好了吗?"你都在等待它给你打电话)。。例如GUI。WPF活动是委托。

委托是第一类对象。IOW您可以引用它们,重新分配它们,等等,就像任何其他对象一样。