zoukankan      html  css  js  c++  java
  • 【C#进阶】多播委托和委托数组像是一回事~

    这个MathOperation类有三静态方法,参数都是double,并且没有返回值,考虑用Action<>() 这种预定义的委托哦

        class MathOperations
        {
            public static void MultiplyByTwo(double value)
            {
                Console.WriteLine( "2* {0} = {1}",value,value * 2);
            }
            public static void Square(double value)
            {
                Console.WriteLine("{0}* {1} = {2}", value, value, value*value );
    
            }
            public static void Introduction(double value)
            {
                Console.WriteLine("I'm a double. My value is {0}", value);
    
            }
        }

    书上提到了委托数组,我们来定义一个。里面放三个方法。

                Action<double>[] delegateList =
                {
                    MathOperations.MultiplyByTwo,
                    MathOperations.Square,
                    MathOperations.Introduction
                };

    我这样调用这个委托。

                foreach(var del in delegateList)
                {
                    del(5);
                }

    输出:

    5* 5 = 25
    2* 5 = 10
    I'm a double. My value is 5

    再以多播委托 +号来试下

                Action<double> operations = MathOperations.MultiplyByTwo;
                operations += MathOperations.Square;
                operations += MathOperations.Introduction;
                operations(5);

    结果是相同的。

    不过书上提到这个方法不错

            public static void ProcessAndDisplayNumber(Action<double> operations, double value)
            {
                operations(value);
            }

    举个栗子,打人,亲人,骂人,掐人,这4个动作都需要一个人作为你动作的对象。 我是一个action委托<in 人>,你可以让我打人,骂人,骂人*2,一下子执行好多个动作,包括重复的动作。这就是我的理解,目前是。

  • 相关阅读:
    适配器
    装饰器
    getOwnPropertyDescriptor
    发布订阅
    策略模式
    window.requestAnimationFrame() 和 window.cancelAnimationFrame()
    L1-056 猜数字
    L1-055 谁是赢家
    L1-054 福到了
    L1-053 电子汪
  • 原文地址:https://www.cnblogs.com/jin-wen-xin/p/6101964.html
Copyright © 2011-2022 走看看