c#高级委托——小白笔记#7

委托

委托(delegate)其实就是将一个方法放到放到另一个方法里面,通过调用另一个方法来实现这个方法的具体功能,而另一个方法就是我们所说的委托。

委托分为三种:命名方法委托,多播委托,匿名委托

一、命名方法委托 

命名方法委托是通过方法名进行方法的订阅。

1、委托的声明方式:

访问修饰符 delegate 返回值 委托名称;

2、委托实例化:

委托名 委托对象 = new 委托名(方法名);

案例分析:

namespace c_Delegate
{
    internal class Program
    {
        public delegate void OnClickDelgate();//声明一个委托

        static void Main(string[] args)
        {
            //将GameStart方法委托给onStartCilck代替执行
            OnClickDelgate onStartClick = new OnClickDelgate(GameStart);
            onStartClick();
            //将GameOver方法委托给onOverCilck代替执行
            OnClickDelgate onOverClick = new OnClickDelgate(GameOver);
            onOverClick();
        }
        public static void GameStart()
        {
            Console.WriteLine("游戏开始");
        }
        public static void GameOver()
        {
            Console.WriteLine("游戏结束");
        }
    }
}

 运行结果:

二、多播委托

委托可以通过“+=”进行方法的订阅,通过“-+”取消订阅。

namespace c_Delegate
{
    class Program
    {
        //声明委托
        public delegate void OnClickDelgate();

        static void Main(string[] args)
        {
            //委托实例化
            OnClickDelgate onStartClick = new OnClickDelgate(GamePlay.GameStart);
            //委托订阅方法
            onStartClick += GamePlay.PlayerCreate;
            onStartClick += GamePlay.PlayerDie;
            onStartClick += GamePlay.GameOver;
            //调用委托
            onStartClick();
        }
    }
    class GamePlay
    {
        public static void GameStart()
        {
            Console.WriteLine("游戏开始");
        }
        public static void PlayerCreate()
        {
            Console.WriteLine("创建角色");
        }
        public static void PlayerDie()
        {
            Console.WriteLine("角色死亡");
        }
        public static void GameOver()
        {
            Console.WriteLine("游戏结束");
        }
    }
}

 运行结果:

三、匿名委托 

匿名委托就是在委托中定义代码块,并通过委托的形式进行实现。就是把订阅委托中的方法换成了具体的代码块。

例如:

    class Program
    {
        public delegate void OnClickDelgate();

        static void Main(string[] args)
        {
            OnClickDelgate onStartClick = new OnClickDelgate(PlayGame);
        }
        public static void PlayGame()
        {
            Console.WriteLine("我要玩游戏");
        }
    }

    class Program
    {
        public delegate void OnClickDelgate();

        static void Main(string[] args)
        {
            OnClickDelgate onStartClick = delegate 
            {
                Console.WriteLine("我要玩游戏");
            };
            onStartClick();
        }
    }

上面第一部分为命名方法委托,第二部分则为匿名委托。上面两种代码的运行结果都是相同的。但是匿名委托中方法不能够重复利用,用途很少,一般只用在只执行一次的委托中。

  • 8
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值