C# 委托

作者: 李霖弢 | 来源:发表于2019-10-24 16:46 被阅读0次

委托类型表示对具有特定参数列表和返回类型的方法的引用(类似JS的函数指针,但类型安全)。
委托用于将方法作为参数传递给其他方法。事件处理程序就是通过委托调用的方法。
静态方法和实例方法均可委托。
通过关键词delegate声明委托。

using System;
delegate double Function(double x);
class Multiplier
{
    double factor;
    public Multiplier(double factor) 
    {
        this.factor = factor;
    }
    public double Multiply(double x) 
    {
        return x * factor;
    }
}
class DelegateExample
{
    static double Square(double x) 
    {
        return x * x;
    }
    static double[] Apply(double[] a, Function f) 
    {
        double[] result = new double[a.Length];
        for (int i = 0; i < a.Length; i++) result[i] = f(a[i]);
        return result;
    }
    static void Main() 
    {
        double[] a = {0.0, 0.5, 1.0};
        double[] squares = Apply(a, Square);
        double[] sines = Apply(a, Math.Sin);
        Multiplier m = new Multiplier(2.0);
        Function MyFunction = m.Multiply;
        double[] doubles =  Apply(a, MyFunction );
    }
}

简单的函数也可以用匿名函数形式直接当作参数传入。

double[] doubles =  Apply(a, (double x) => x * 2.0);

调用时,委托可以调用多个方法。 这被称为多播
通过+-+=-=进行添加/删除方法。方法会按加入的顺序依次执行。
如果委托具有返回值和/或输出参数,它将返回最后一个调用方法的返回值和参数。

delegate int MyFunction(int a, int b);
class Test
{
    static int MyAdd(int a, int b)
    {
        Console.WriteLine(a + b);
        return a + b;
    }
    static int MyMinus(int a, int b)
    {
        Console.WriteLine(a - b);
        return a - b;
    }
    public Test(int a, int b)
    {
        MyFunction myFunction = MyAdd;
        myFunction += MyMinus;
        myFunction += MyMinus;
        myFunction -= MyMinus;
        Console.WriteLine(myFunction(a, b));
    }
}
...
new Test(10, 20);//30 -10 -10

相关文章

  • C# 委托

    C#委托 C#中的委托(Delegate)类似于C或C++中函数的指针。委托(Delegate)是存有对某个方法的...

  • 教小明学一点点编程—C#篇(0)

    像小明这样使用C#的新同学,一定都会被C#的复杂的委托事件机制所困惑,那么我们不如解释一下什么是C#中委托。 委托...

  • C#委托 匿名函数 Lambda

    C# 中委托的发展#在 C# 1.0 中,通过使用在代码中其他位置定义的方法显式初始化委托来创建委托的实例。 C#...

  • 2020-02-19

    C# 委托 (一)—— 委托、 泛型委托与Lambda表达式 原创wnvalentin 最后发布于2018-08-...

  • (转).NET面试题系列[7] - 委托与事件

    委托和事件 委托在C#中具有无比重要的地位。 C#中的委托可以说俯拾即是,从LINQ中的lambda表达式到(包括...

  • 委托及其用法

    C#委托使用详解(Delegates) 1. 委托是什么? 其实,我一直思考如何讲解委托,才能把委托说得更透彻。说...

  • C# 高级语言总结

    后续 1 C# 委托 委托(Delegate)特别用于实现事件和回调方法。所有的委托(Delegate)都派生自 ...

  • C#匿名方法、Lambda表达式和各种泛型委托

    Linq查询与高级C#编程机器理论研究基础 C#委托解决的是对象之间的逆向传递问题,其次,委托还有其他的用途(匿名...

  • C#中的委托是用来干嘛的

    在C#中我们会听到一个概念——委托。那么委托是个什么鬼,用来干嘛的呢?最近有些空闲时间就写一下C#中委托相关的知识...

  • C# 基础知识系列- 11 委托和事件

    0. 前言 事件和委托是C#中的高级特性,也是C#中很有意思的一部分。出现事件的地方,必然有委托出现;而委托则不一...

网友评论

      本文标题:C# 委托

      本文链接:https://www.haomeiwen.com/subject/rgddvctx.html