c# - .NET 中委托(delegate)的目的是什么

标签 c# delegates

所以我对 C# 中的委托(delegate)有点困惑....它们的作用是什么以及它们有什么用?我读过一些教程,但我并没有真正理解它们应该做什么(每个人都将它们与 C 中的函数指针相关联,而我从未用 C 编程过)。

那么...委托(delegate)做什么?我应该在什么情况下使用它们?我将如何使用它们?

最佳答案

其他答案都不错,但这里有另一种思考委托(delegate)的方法可能会有帮助。想象一下,委托(delegate)只不过是一个接口(interface)。当你看到:

delegate void Action();

思考:

interface IAction
{
    void Invoke();
}

当你看到:

Action myAction = foo.Bar;

思考:

class FooBarAction : IAction
{
    public Foo Receiver { get; private set; }
    public FooBarAction(Foo foo)
    {
        this.Receiver = foo;
    }
    public void Invoke()
    {
        this.Receiver.Bar();
    }
}
...
IAction myAction = new FooBarAction(foo);

当你看到

myAction();

思考

myAction.Invoke();

构造什么类型的实际细节有点不同,但基本上就是这样。委托(delegate)只是一个具有名为 Invoke 的方法的对象,当您调用该方法时,它会委托(delegate)您调用其他对象的其他方法。这就是它被称为“委托(delegate)”的原因——因为它委托(delegate)对另一个对象的另一个方法的调用。

关于c# - .NET 中委托(delegate)的目的是什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7681699/

相关文章:

c# - 如何从 DataTable 返回 Last() 作为 IEnumerable

asp.net - 具有 ASP.NET 母版页的事件和委托(delegate)

swift - 按下特定选项卡时设置委托(delegate)

c# - 由于某种原因,简单的 ajax 时钟适用于除 IE 之外的所有内容

jquery - IE 8 - 慢速点击事件识别 - 100 个可点击的表格单元格

python - 如何在QTableView单元角绘制一个三角形以显示可以从列表中选择模型数据?

c# - 使用动态注入(inject)类创建委托(delegate)

c# - 引用文本文件 Visual Studio C#

c# - 使用 iTextSharp 将文本添加到内存流中的现有多页 PDF 文档

c# - 以下示例代码中 AttemptController 中的静态字段是什么意思?