开启左侧

C#事件与委托联合 案例

[复制链接]
Criss 发表于 2016-7-19 21:33:20 | 显示全部楼层 |阅读模式
  1. //新郎官类
  2.     public class Bridegroom
  3.     {
  4.         public delegate void MarryHandler(string msg);

  5.         public event MarryHandler MarryEvent;

  6.         //发出事件
  7.         public void OnMarriageComing(string msg)
  8.         {
  9.             if(MarryEvent!=null)
  10.             {
  11.                 MarryEvent(msg);
  12.             }
  13.         }

  14.         static void Main(string[] args)
  15.         {
  16.             //初始化新郎官对象
  17.             Bridegroom bridegroom = new Bridegroom();

  18.             //实例化朋友对象
  19.             Friend f1 = new Friend("张三");
  20.             Friend f2 = new Friend("李四");
  21.             Friend f3 = new Friend("王五");

  22.             //订阅事件
  23.             bridegroom.MarryEvent += new MarryHandler(f1.SendMessage);
  24.             bridegroom.MarryEvent += new MarryHandler(f2.SendMessage);

  25.             //发出通知
  26.             bridegroom.OnMarriageComing("朋友们,我结婚了,到时候准时参加婚礼!");
  27.             Console.WriteLine("------------------------------------------------");

  28.             //取消事件
  29.             bridegroom.MarryEvent -= new MarryHandler(f2.SendMessage);
  30.             bridegroom.MarryEvent += new MarryHandler(f3.SendMessage);

  31.             //发出通知
  32.             bridegroom.OnMarriageComing("朋友们,我结婚了,到时候准时参加婚礼!");
  33.             Console.Read();
  34.         }
  35.     }

  36.     //朋友类
  37.     public class Friend
  38.     {
  39.         public string Name;

  40.         public Friend(string name)
  41.         {
  42.             Name = name;
  43.         }

  44.         public void SendMessage(string message)
  45.         {
  46.             Console.WriteLine(message);
  47.             Console.WriteLine(this.Name+"收到了,到时候准时参加!");
  48.         }
  49.     }
复制代码


zbin23651 发表于 2017-10-31 20:25:14 | 显示全部楼层
路过   学习。。。。。。。。。。。。。。
alwin520 发表于 2021-3-16 20:35:48 | 显示全部楼层
这个例子很有意思,我用观察者模式实现一下:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace EventDelegateDemo1
{
    class Program
    {
        static void Main(string[] args)
        {

            //创建一个 Bridegroom 对象,并实例
            Bridegroom bridegronm = new Bridegroom();
            //创建多个朋友
            Friend f1 = new Friend(bridegronm, "李四");
            Friend f2 = new Friend(bridegronm, "张三");
            Friend f3 = new Friend(bridegronm, "王五");
            Friend f4 = new Friend(bridegronm, "丁六");
            //新郎官发结婚通知
            bridegronm.OnMarryEvent("我要结婚了,大家都来参加哈~~");
            Console.ReadKey();
        }
    }

    //新郎官
    class Bridegroom
    {
        //定义委托类型
       public delegate void MarryHandler(string msg);
        //定义事件
        public event MarryHandler MarryEvent;
        //事件触发方法
        public void OnMarryEvent(string msg)
        {
            if (MarryEvent!=null)
            {
                MarryEvent(msg);
            }
        }
    }
   //朋友类
    class Friend
    {
        //手机存有的新郎官
        private Bridegroom bridegroomF;
        private string Name = "";
        public Friend(Bridegroom bridegroom, string name)
        {
            this.bridegroomF = bridegroom;
            this.Name = name;
            bridegroomF.MarryEvent += BridegroomF_MarryEvent;
        }
        //事件绑定方法
        private void BridegroomF_MarryEvent(string msg)
        {
            Console.WriteLine($"朋友{Name},收到信息:-{msg}");
            Console.WriteLine($"朋友{Name},回复消息:收到了,一定准时出席参加");
        }
    }
}
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表