委托和事件

委托:


委托是一个类,它定义了方法的类型,可以将一个方法作为另一个方法的参数动态的传递,避免了程序中使用大量的if…else…语句,也使得程序具有很好的扩展性。

using System;
using System.Collections.Generic;
using System.Text;

namespace Delegate {
    class Program
    {
        //定义委托,它定义了可以代表的方法的类型
        public delegate void GreetingDelegate(string name);
        private static void EnglishGreeting(string name)
        {
            Console.WriteLine("Morning, " + name);
        }

        private static void ChineseGreeting(string name)
        {
            Console.WriteLine("早上好, " + name);
        }

        //注意此方法,它接受一个GreetingDelegate类型的方法作为参数
        private static void GreetPeople(string name, GreetingDelegate MakeGreeting)
        {
            MakeGreeting(name);
        }

        static void Main2(string[] args)
        {
            GreetPeople("gzh", EnglishGreeting);
            GreetPeople("高正浩", ChineseGreeting);
            Console.ReadKey();
        }
    }
}

输出如下:
Morning, gzh
早上好, 高正浩

事件:


事件内部是用委托实现的,是一种特殊的委托,事件内部有一个带event关键字的委托,在类的内部,不管声明public或者protected,他都是private;在类的外部,注册“+=”和注销“-=”的访问限定符与你在声明事件时使用的访问符相同

namespace Delegate {
	public class GreetingManager
    {
        //定义委托,它定义了可以代表的方法的类型
        public delegate void GreetingDelegate(string name);

        //这一次我们在这里声明一个事件
        public event GreetingDelegate MakeGreet;

        public void GreetPeople(string name)
        {
            MakeGreet(name);
        }
    }
    class Program
    {
        private static void EnglishGreeting(string name)
        {
            Console.WriteLine("Morning, " + name);
        }

        private static void ChineseGreeting(string name)
        {
            Console.WriteLine("早上好, " + name);
        }
        static void Main(string[] args)
        {
            GreetingManager gm = new GreetingManager();
            gm.MakeGreet += EnglishGreeting;
            gm.MakeGreet += ChineseGreeting;
            
            gm.GreetPeople("gzh");
        }
    }
}

输出如下:
Morning, gzh
早上好,gzh

参考大牛的博客:https://www.cnblogs.com/JimmyZhang/archive/2007/09/23/903360.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值