委托理解

来源:互联网 发布:无线网搜索不到网络 编辑:程序博客网 时间:2024/06/05 10:43

 下面通过一个简单的运算器来阐述委托的理解,当然最好的例子是委托使用线程池异步调用方啊;

 

 

C # Code:

 

 class Caculate    {        public static double Add(int a, int b)        {            int c;            c = a + b;            return c;        }        public static double Minus(int a, int b)        {            int c;            c = a - b;            return c;        }        public static double Mutiply(int a, int b)        {            int c;            c = a * b;            return c;        }       //除法取整数        public static double  Divison_Round(int a, int b)        {            int c;            c = a / b;            return c;        }        //除法取余数        public static double Divison(int a, int b)        {            int c;            c = a % b;            return c;        }    }


 

namespace Treading1{     //创建委托     delegate double  MathAction(int m,int n);            class DelegateTest    {        //把方法都放到一个类中看起来好看!        //static int Add(int a, int b)        //{        //    int c;        //    c = a + b;        //    return c;        //}        //static int minus(int a, int b)        //{        //    int c;        //    c = a -b;        //    return c;        //}        //static int mutiply(int k,int d)        //{        //         int  c;        //         c = k * d ;        //         return c;        // }        //static int divison(int k, int d)        //{        //    int c;        //    c = k / d;        //    return c;        //}       //还可以继续添加方法,然后参数和委托定义的相同就可以,这样只要通过实例化委托就可以异步调用方法,           static void Main(string[] args)        {                       //// 用方法名初始化委托            //MathAction ma = Add;                       //// 调用委托变量ma,并返回计算值            //int addnum = ma.Invoke(10, 9);            //Console.WriteLine(addnum);            //// 再用别的方法初始化委托            //MathAction ma2 = Minus;            //double square = ma2(10,9);            //Console.WriteLine(square);            ////.........            //委托实例放数组里,再添加新的方法主要数组和类里添加,其他地方不用改变!            Console.WriteLine("请输入第一个数字数字:\n");            int a = int.Parse(Console.ReadLine());            Console.WriteLine("请输入第二个数字数字:\n");            int b = int.Parse(Console.ReadLine());            MathAction[] Nma =            {                               Caculate .Add ,               Caculate .Minus ,               Caculate .Mutiply ,                            Caculate .Divison_Round ,               Caculate .Divison             };            for (int i = 0; i < Nma.Length; i++)            {                                    Console.WriteLine("运算法则[{0}]", i );                    ProceeNumber(Nma[i], a, b);                    //ProceeNumber(Nma[i], 5, 6);                    Console.WriteLine();            }            Console.ReadKey();        }        //委托传递过来,并将其定为第一个参数;        static void ProceeNumber( MathAction Action  ,int x,int y)        {            //调用委托变量,并返回计算值;            double result = Action(x, y);                        Console.WriteLine("运算结果是:{0}", result);        }                                                                         }}


原创粉丝点击