委托 方法 调用

   delegate int Mydel(ref int X);  // 声明 一个有返回值 和引用参数的 delegate 

    class Test                      // 创建类
    {
        public int PrintOne(ref int X)            //  引用参数 实例方法1
        {
            X += 2;
            return X;
        }
        public static int PrintTwo(ref int X)     //  引用参数 静态方法2
        {
            X += 3;
            return X;
        }
    }

    class Program
    {
        static void Main(string[] args)
        {
            Test t = new Test();   // 实例化类
            Mydel mydel;           // 创建空 委托

            mydel = t.PrintOne;    // 给委托赋值
            PrintMydel(mydel,1);     //  调用委托  打印展示效果
            mydel += Test.PrintTwo;  // 给委托增加 静态方法   
            PrintMydel(mydel,2);
            mydel += t.PrintOne;     // 给委托增加实例方法
            PrintMydel(mydel,3);
            mydel += Test.PrintTwo;  // 参数的新值会在委托里的每一个方法 传递下去
            PrintMydel(mydel,4);
            Console.WriteLine("======================");


            mydel -= t.PrintOne;   // 移除方法
            PrintMydel(mydel,1);
            mydel -= Test.PrintTwo;
            PrintMydel(mydel,2);
            mydel -= Test.PrintTwo;
            PrintMydel(mydel,3);
            mydel -= Test.PrintTwo;    // 调用委托中不存在的方法 没有任何效果
            PrintMydel(mydel,4);
            mydel -= t.PrintOne;      // 执行完此次方法移除 委托变为空委托 
            PrintMydel(mydel, 5);    /* 调用空委托 抛出异常 */
            Console.ReadKey();
        }
        public static void PrintMydel(Mydel mydel, int num)
        {
            int X = 5;
            //if (mydel != null)   // if 判断 处理异常
            //{
                  Console.WriteLine("第{1}次执行:X值:{0}", mydel(ref X), num);
            //}
            //else
            //{
            //    Console.WriteLine("第{1}次执行:X值:{0}", X, num);
            //    Console.WriteLine("Delegate is empty");
            //}
        }
    }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值