天天看點

Delegate two

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

//使用委托方式之一:把方法組合到一個數組中,再循環中調用不同的方法

namespace Delegate

{

    delegate double DoubleOp(double x);//一旦定義了委托類,就可以執行個體化它的執行個體,像處理一般的類那樣

    class Program

    {

        static void Main(string[] args)

        {        

            DoubleOp[] opertions = {new DoubleOp(MathsOperations.MultiplyByTwo),//每一個元素都初始化為由MathOperations 類執行的不同操作(封裝方法)

             new DoubleOp(MathsOperations.Square)

             };

            for (int i = 0; i < opertions.Length; i++)

            {

                Console.WriteLine("Using operations[{0}]:",i);

                ProcessAndDisplayNumber(opertions[i], 2.0);//将委托傳遞給ProcessAndNumber() 方法,僅傳遞委托名,但不帶任何參數

                ProcessAndDisplayNumber(opertions[i], 7.94);//operation[i]表示“這個委托”,也即;委托代表的方法

                ProcessAndDisplayNumber(opertions[i], 1.414);//operation[i](2.0)  表示“調用這個方法,參數放在括号中”

                Console.ReadLine();

            }

        }

        /// <summary>

        /// 把一個委托作為其第一個參數

        /// </summary>

        /// <param name="action"></param>

        /// <param name="value"></param>

        static void ProcessAndDisplayNumber(DoubleOp action,double value)

        {

            double result = action(value);//調用action委托執行個體封裝的方法,其傳回結果存儲在result 中

            Console.WriteLine("Value is{0},result of operation is {1}",value ,result );         

    }

    /// <summary>

    /// 委托要調用的兩個方法

    /// </summary>

    class MathsOperations

        public static double MultiplyByTwo(double value)

            return value * 2;       

        public static double Square(double value)

            return value * value;

    }   

}

繼續閱讀