美文网首页
C#之delegate(委托)

C#之delegate(委托)

作者: 困卡 | 来源:发表于2017-04-13 23:01 被阅读0次
定义

委托是一个类,它定义了方法的类型,使得可以将方法当作另一个方法的参数来进行传递,这种将方法动态地赋给参数的做法,可以避免在程序中大量使用If-Else(Switch)语句,同时使得程序具有更好的可扩展性。

如果我们要把一个方法当作另一个方法的参数来传递,那么我们就需要用到委托。

可将任何可访问类或结构中与委托类型匹配的任何方法分配给委托。 该方法可以是静态方法,也可以是实例方法。 这样便能通过编程方式来更改方法调用,还可以向现有类中插入新代码。

  1. 语法:

写在命名空间中或类中。

   //定义一个委托,可赋值 返回值为空并且参数列表也为空的方法。
    public delegate void PerformFunction1();
    //定义一个委托, 可赋值 返回值为int,不需要参数的方法。
    public delegate int PerformFunction2();

    //定义一个委托, 可赋值 返回值为空,参数列表第一个为int,第二个为string,第三个为float的方法
    public delegate void PerformFunction3(int age, string name, float height);

     //定义一个委托, 可指向 返回值为bool, 参数列表为 任意两个同类型的形参
    public delegate bool Compare<in T>(T obj1, T obj2);


        static void Main(string[] args)
        {
            // 两种初始化方法
            PerformFunction1 perform1 = new PerformFunction1(testFunction);
            PerformFunction3 perform2 = printPersonDesc;

            // 两种调用方法
            perform1();
            perform2.Invoke(18, "张三", 1.87f);
        }

        static void printPersonDesc(int age, string name, float height)
        {
            Console.WriteLine(age + name + height);
        }

        static void testFunction()
        {
            Console.WriteLine("调用了testFunction");
        }

将方法作为参数进行引用的能力使委托成为定义回调方法的理想选择。 例如,对比较两个对象的方法的引用可以作为参数传递到排序算法中。

示例
// 声明委托——定义所需的签名:
    delegate double MathAction(double num);

    class DelegateTest
    {
        //常规方法相匹配的签名:
        static double Double(double input)
        {
            return input * 2;
        }

        static void Main()
        {
            //实例化委托与命名方法:
            MathAction ma = Double;

            //调用委托ma:
            double multByTwo = ma(4.5);
            Console.WriteLine("multByTwo: {0}", multByTwo);

            // 实例化委托与匿名方法:
            MathAction ma2 = delegate(double input)
            {
                return input * input;
            };

            double square = ma2(5);
            Console.WriteLine("square: {0}", square);

            // 实例化委托与lambda表达式
            MathAction ma3 = s => s * s * s;
            double cube = ma3(4.375);

            Console.WriteLine("cube: {0}", cube);
        }
        // Output:
        // multByTwo: 9
        // square: 25
        // cube: 83.740234375
    }

相关文章

  • C# 委托

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

  • C# 高级语言总结

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

  • C#委托Delegate和事件Event实战应用

    一、委托的概念 C# 中的委托(Delegate)类似于 C 或 C++ 中函数的指针。委托(Delegate)是...

  • C# 委托(Delegate)

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

  • 19-委托

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

  • C#之delegate(委托)

    定义 委托是一个类,它定义了方法的类型,使得可以将方法当作另一个方法的参数来进行传递,这种将方法动态地赋给参数的做...

  • C# 委托(delegate)

    委托是一种引用类型,可以将方法作为参数传递给其他方法,作为参数的这个方法可以是静态方法,实例方法,也可以是匿名方法...

  • C# delegate

    C# 中的 Delegate 类似于 C++ 中函数的指针。所有的委托Delegate都派生自 System.De...

  • 关于C#中的委托与事件以及两者之间的关系

    一 关于委托 1.委托的概念: C# 中的委托(Delegate)是一种引用类型变量,它类似于C的函数指针,...

  • 52个有效方法(23) - 通过委托与数据协议进行对象间的通信

    委托模式(Delegate pattern) 委托模式(Delegate pattern):用来实现对象间的通信 ...

网友评论

      本文标题:C#之delegate(委托)

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