C# Delegate类

Delegate作用
Delegate(托付、委托)类,通过它可 引用 静态方法或引用实例的方法。
一般用于事件和处理的方法关联

Delegate基本写法:
① 声明Delegate。 写法: 访问修饰符 delegate 返回值类型 自定义方法名(参数类型 参数,......); 注意参数要和调用方法的参数对应起来。
② 编写引发Delegate的函数
③ 编写Delegate操作的方法。
④ 使用


例子
using System;
using System.Collections.Generic;
using System.Text;

namespace DelegateDemo
{
    class Class1
    {
        delegate double processDelegate(double db1, double db2);
        static double Multiply(double db1, double db2)
        {
            return db1 * db2;
        }
        static double Divide(double db1, double db2)
        {
            return db1 / db2;
        }
        static void NamedMethod(string strInput,double dbNum1,double dbNum2)
        {
            processDelegate process;           
            if (strInput == "M")
                process = new processDelegate(Multiply);
            else
                process = new processDelegate(Divide);
            Console.WriteLine("结果为:{0}", process(dbNum1, dbNum2));

        }
        static void AnonymousMethod(string strInput, double dbNum1, double dbNum2)
        {
            processDelegate process;
            if (strInput == "M")
                process = delegate(double db1, double db2){return db1 * db2;};
            else
                process = delegate(double db1, double db2) { return db1 / db2; };
            Console.WriteLine("结果为:{0}", process(dbNum1, dbNum2));

        }
        /// <summary>
        /// 应用程序的主入口点。
        /// </summary>
        [STAThread]
        static void Main(string[] args)
        {
            //
            // TODO: 在此处添加代码以启动应用程序
            Console.WriteLine("请输入两个小数,用逗号分割");
            string strInput = Console.ReadLine();
            int commmaPos = strInput.IndexOf(',');
            double dbNum1 = Convert.ToDouble(strInput.Substring(0, commmaPos));
            double dbNum2 = Convert.ToDouble(strInput.Substring(commmaPos + 1));
            Console.WriteLine("输入M表示乘法,或者D表示除法");
            strInput = (Console.ReadLine()).ToUpper();
            //使用命名方法
            Console.WriteLine("使用命名方法委托");
            NamedMethod(strInput,dbNum1,dbNum2);  
            //使用匿名方法
            Console.WriteLine("使用匿名方法委托");
            AnonymousMethod(strInput, dbNum1, dbNum2);  

        }
    }

}

 

posted @ 2012-10-17 15:39  杨斌_济南  阅读(641)  评论(0编辑  收藏  举报