代码改变世界

使用委托实现了在循环中调用不同的方法

2012-12-10 22:58  哒不溜  阅读(1803)  评论(2编辑  收藏  举报

今天晚上感觉到精力充沛,所以看看了书,随便翻开看到了一个关于委托了小例子,在这里拿出来跟大家分享一下。

首先定义了一个MathOperations类,该类里面有两个静态方法(定义成静态的方便后面调用),方法真的简单的过分,我就不解释了,上代码吧:

    class MathOperations
    {
        public static double MultiplyByTwo(double value)
        {
            return value * 2;
        }

        public static double Square(double value)
        {
            return value * value;
        }
    }

简单吧!

下面定义调用方法:

    delegate double DoubleOp(double x);

    class Program
    {
        static void Main(string[] args)
        {
            DoubleOp[] operations =
            {
                MathOperations.MultiplyByTwo,
                MathOperations.Square
            };
            for (int i = 0; i < operations.Length; i++)
            {
                Console.WriteLine("Using Operations[{0}]:", i);
                ProcessAndDisplayNumber(operations[i], 2.0);
                ProcessAndDisplayNumber(operations[i], 7.94);
                ProcessAndDisplayNumber(operations[i], 1.414);
                Console.WriteLine(Environment.NewLine);
            }
            Console.ReadKey();
        }

        static void ProcessAndDisplayNumber(DoubleOp action, double value)
        {
            double result = action(value);
            Console.WriteLine("Value is {0},result of operation is {1}", value, result);
        }
    }

既然要用委托来实现,那么一定要定义一个委托咯,代码如上。

在这段代码中,实例化了一个委托数组DoubleOp(温馨提示:一旦定义了委托,基本就可以实例化它了,那么就可以像处理类那样,使用该委托了,所以这里把一些委托的实例放到数组中是可以的)。数组被初始化为由MathsOperations类实现的不同操作。然后遍历该数组,把每个操作应用到3个不同的值上,这恰好说明了委托的一种方式:把方法组合到一个数组中来使用,这样就实现了在循环中调用不同的方法了。

这段代码的关键一行是把每一委托传递给了ProcessAndDisplayNumber()方法, 例如:

 ProcessAndDisplayNumber(operations[i], 2.0);

这里“operations[i]”,如果i=0的话,可以使用operations[0](2.0),直接调用MultiplyByTwo(2.0)该方法。

ProcessAndDisplayNumber()方法定义了把一个委托作为一个参数,

然后调用时:

double result=action(value);

总结:委托的用法跟类是一样一样的,唯一的区别是委托是指向方法的引用,把方法当作参数进行传递,而实现的方法可以自定义。