欢迎光临散文网 会员登陆 & 注册

【事件•语法篇】如何声明自定义的事件以及事件的完整/简略声明格式(附:事件...

2023-07-02 14:18 作者:栽在这  | 我要投稿

using System;

using System.Collections;

using System.Collections.Generic;

using UnityEngine;

/// <summary>

/// 

/// 自定义事件

/// </summary>

public class OrderEventArgs:EventArgs

{

  public string CoffeeName { get; set; }

  public string CoffeeSize { get; set; }

  public float CoffeePrice { get; set; }

}

/// <summary>

/// 事件的拥有者[类]----->Customer类

/// 事件[event关键字修饰]----->OnOrder,点餐事件

/// 时间的响应者[类]----->Waite类r

/// 事件处理器[方法-收到约束的方法]----->TakeAction方法

/// 事件的订阅关系[+=]----->+=

/// </summary>

public class Tra : MonoBehaviour

{

  //规定:当委托是要实现某种事件时,命名为事件名+EventHandler--具有可读性,也可以约束改委托

  //为OnOrder事件声明委托

  public delegate void OrderEventHandler(Customer _customer, OrderEventArgs _e);

  Customer customer = new Customer();

  Waiter waiter = new Waiter();

  // Start is called before the first frame update

  void Start()

  {

    customer.OnOrder += waiter.TakeAction;//事件处理器

    customer.Order();//事件拥有者的内部逻辑,触发事件


    customer.PayTheBill();

  }

  public class Customer

  {

    public float Bill { get; set; }

    public void PayTheBill()

    {

      Debug.Log("付"+Bill+"钱");

    }

    private OrderEventHandler orderEventHandler;

    //申明事件

    public event OrderEventHandler OnOrder

    {

      add

      {

        orderEventHandler += value;//添加事件处理器

      }

      remove

      {

        orderEventHandler -= value;

      }

    }

    public void Order()

    {

      if(orderEventHandler!=null)

      {

        OrderEventArgs e = new OrderEventArgs();

        e.CoffeeName = "abc";

        e.CoffeeSize = "Grand";

        e.CoffeePrice = 30;


        orderEventHandler(this, e);

      }

    }

  }

  public class Waiter

  {

    internal void TakeAction(Customer _customer, OrderEventArgs _e)

    {

      float finalPrice = 0;

      switch(_e.CoffeeSize)

      {

        case "Tall":

          finalPrice = _e.CoffeePrice;//原价

          break;

        case "Grand":

          finalPrice = _e.CoffeePrice + 3;

          break;

        case "Venti":

          finalPrice = _e.CoffeePrice + 6;

          break;

      }

      _customer.Bill += finalPrice;

    }

  }

}

【事件•语法篇】如何声明自定义的事件以及事件的完整/简略声明格式(附:事件...的评论 (共 条)

分享到微博请遵守国家法律