C# 事件链 的简单例子-以坦克世界为例

事件链例子
火炮 : 发布器类
三种坦克 : 订阅器类

火炮 内部只需要 基于 委托 定义一个事件,在main 中 向这个事件 按顺序 添加要测试(触发)的坦克。

就能实现 火炮击发的时候 自动攻击 这些外部添加的坦克。

using System;
using System.Linq;

namespace SimpleEvent
{
  /***********发布器类***********/
  public class 火炮
  {
    public delegate bool DecideAttack(int v);//委托
    public event DecideAttack attack;//事件

    public void Attack()
    {
      var r = new Random(DateTime.Now.Millisecond);
      var v = r.Next(80, 300);
      Console.WriteLine("用 {0} mm火炮进行攻击",v);
      attack.Invoke(v);
      Console.WriteLine("");
    }

  }

  /***********订阅器类***********/
  // 也就是事件处理者们


  public class T34
  {
    string name = "T34";
    int zj = 102;
    public bool Decide(int v)
    {
      if (v >= zj)
      {
        Console.WriteLine("{0}\t被 击穿!", name);
        return true;
      }
      else
      {
        Console.WriteLine("{0}\t未击穿", name);
        return false;
      }
    }
  }
  public class M4A1
  {
    string name = "M4A1";
    int zj = 63;
    public bool Decide(int v)
    {
      if (v >= zj)
      {
        Console.WriteLine("{0}\t被 击穿!", name);
        return true;
      }
      else
      {
        Console.WriteLine("{0}\t未击穿", name);
        return false;
      }
    }
  }
  public class ZTZ99
  {
    string name = "ZTZ99";
    int zj = 220;
    public bool Decide(int v)
    {
      if (v >= zj)
      {
        Console.WriteLine("{0}\t被 击穿!", name);
        return true;
      }
      else
      {
        Console.WriteLine("{0}\t未击穿", name);
        return false;
      }
    }


    class Program
    {
      static void Main(string[] args)
      {
        var player = new 火炮();
        player.attack += new 火炮.DecideAttack(new T34().Decide);
        player.attack += new 火炮.DecideAttack(new M4A1().Decide);
        player.attack += new 火炮.DecideAttack(new ZTZ99().Decide);

        foreach (var i in Enumerable.Range(0, 5))
        {
          player.Attack();
        }


        Console.ReadKey();
      }
    }
  }
}

推荐想了解 事件概念的同学 复制该代码,自己试试。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值