C#中委托的使用

委托:委托是一种数据类型,委托代表的是【一类静态(返回值与参数列表相同的)】方法,调用委托就是调用这个静态方法
定义委托:delegate void HandlerDelegateTest();

(定义委托 习惯上 委托名 以Handler开头或结尾,看到Handler 就代表是委托  行业规定、习惯)
声明初始化并绑定方法 delegateTest dele = new delegateTest(Test);      绑定Test(静态)方法
调用委托 delegateTest();       ====>>>就是调用了Test方法

public static void Test(){}

委托:单播委托、多播委托(不适合委托有返回值的方法,只会返回最后绑定的方法返回值)

class Program
    {
        //*****************调用端

        static void Main(string[] args)
        {
            //初始化委托  并绑定方法(在本类中,则直接方法名就可以):有四种方法
            //HandlerDelegateTest dele = new HandlerDelegateTest(Test);//第一种:等价于下面的代码
            HandlerDelegateTest dele = Test;//第二种:等号右边 表示委托的对象  相当于第一种的简化版
            //第三种   匿名方法        直接给委托绑定 方法对象(等号右边 表示委托的对象)
            //                              适用于:功能简单少量代码可以完成,且该功能不需要在其它地方复用
            HandlerDelegateTest dele2 = delegate ()
              {
                  Console.WriteLine("匿名方法委托");
              };
            dele2();

            //第四种   Lambda表达式语法:
            //          委托类型委托对象名 = Lambda表达式;
            //          写法一: (参数)=>{ 语句} ;     标志格式(注意 => 叫做 goto)            
            //         简化写法二: 一个参数 => 一行代码; 可以省略小括号 与大括号

            //                              适用于:Lambda表达式,适合于:功能代码超简单,一行代码可以完成

            //  声明委托                  =右边 Lambda表达式  无参的() 委托对象 ()=> Console.WriteLine("Lambda表达式委托") 
            HandlerDelegateTest dele3 = () => { Console.WriteLine("Lambda表达式委托"); };
            dele3();//调用

            //初始化(Lambda表达式 委托)
            OneHandler oneDelegate = a =>Console.WriteLine("一个参数的Lambda表达式"+a);
            oneDelegate += a => Console.WriteLine("Lambda表达式" + a);//多播委托
            oneDelegate(2);//调用

            //调用委托 就是调用了绑定的方法
            dele();

            //声明并初始化委托  并绑定方法(别的类中的方法,则类名点方法名)      
            //          单播委托:一个委托绑定一个方法
            CalculateHandler cal = new CalculateHandler(TwoNumberAdd.Calculate);
            //          多播委托:一个委托绑定多个方法(其中每个方法都会执行,根据绑定顺序依次执行,但只会返回最后绑定的方法值)
            cal = cal + new CalculateHandler(TwoNumberAdd.Calculate2);
            //                          调用委托 就是调用了绑定的方法
            //先调用 绑定的Calculate方法,然后调用Calculate2方法,并返回该方法的值(也可以理解将前面方法返回的结果覆盖掉了,实际是不会返回前面的)
            Console.WriteLine(cal(1, 2));
        }

        public static void Test()
        {
            Console.WriteLine("通过委托 调用了这个方法");
        }

    }
//*****************定义端

    /// <summary>
    /// 两数相加的类:测试委托绑定其余类中的方法
    /// </summary>
    class TwoNumberAdd
    {
        /// <summary>
        /// 计算两数相加
        /// </summary>
        /// <param name="num1"></param>
        /// <param name="num2"></param>
        /// <returns></returns>
        public static int Calculate(int num1, int num2)
        {
            return num1 + num2;
        }
        public static int Calculate2(int num1, int num2)
        {
            return num1 * num2;
        }
    }
    /// <summary>
    /// 委托 返回值类型int 两个参数
    /// </summary>
    /// <param name="num1"></param>
    /// <param name="num2"></param>
    /// <returns></returns>
    delegate int CalculateHandler(int num1, int num2);

    /// <summary>
    /// 定义委托
    /// </summary>
    delegate void HandlerDelegateTest();
    delegate void OneHandler(int a);


 

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值