【事件?語(yǔ)法篇】如何聲明自定義的事件以及事件的完整/簡(jiǎn)略聲明格式(附:事件...

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>
/// 事件的擁有者[類(lèi)]----->Customer類(lèi)
/// 事件[event關(guān)鍵字修飾]----->OnOrder,點(diǎn)餐事件
/// 時(shí)間的響應(yīng)者[類(lèi)]----->Waite類(lèi)r
/// 事件處理器[方法-收到約束的方法]----->TakeAction方法
/// 事件的訂閱關(guān)系[+=]----->+=
/// </summary>
public class Tra : MonoBehaviour
{
??//規(guī)定:當(dāng)委托是要實(shí)現(xiàn)某種事件時(shí),命名為事件名+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();//事件擁有者的內(nèi)部邏輯,觸發(fā)事件
????customer.PayTheBill();
??}
??public class Customer
??{
????public float Bill { get; set; }
????public void PayTheBill()
????{
??????Debug.Log("付"+Bill+"錢(qián)");
????}
????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;//原價(jià)
??????????break;
????????case "Grand":
??????????finalPrice = _e.CoffeePrice + 3;
??????????break;
????????case "Venti":
??????????finalPrice = _e.CoffeePrice + 6;
??????????break;
??????}
??????_customer.Bill += finalPrice;
????}
??}
}