C# 事件(event)案例
阿新 • • 發佈:2021-01-08
技術標籤:C#
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace 摔杯為號 { class Program { /// <summary> /// 首領A舉杯委託 /// </summary> /// <param name="hand">手:左、右</param> public delegate void RaiseEventHandler(string hand); /// <summary> /// 首領A摔杯委託 /// </summary> public delegate void FallEventHandler(); /// <summary> /// 首領A /// </summary> public class CaptainA { /// <summary> /// 首領A舉杯事件 /// </summary> public event RaiseEventHandler RaiseEvent; /// <summary> /// 首領A摔杯事件 /// </summary> public event FallEventHandler FallEvent; /// <summary> /// 舉杯 /// </summary> /// <param name="hand">手:左、右</param> public void Raise(string hand) { Console.WriteLine("首領A{0}手舉杯", hand); // 呼叫舉杯事件,傳入左或右手作為引數 if (RaiseEvent != null) { RaiseEvent(hand); } } /// <summary> /// 摔杯 /// </summary> public void Fall() { Console.WriteLine("首領A摔杯"); // 呼叫摔杯事件 if (FallEvent != null) { FallEvent(); } } } /// <summary> /// 部下B /// </summary> public class GeneralB { CaptainA captainA; public GeneralB(CaptainA a) { this.captainA = a; a.RaiseEvent += new RaiseEventHandler(a_RaiseEvent); // 訂閱舉杯事件 a.FallEvent += new FallEventHandler(a_FallEvent); // 訂閱摔杯事件 } /// <summary> /// 首領舉杯時的動作 /// </summary> /// <param name="hand">若首領A左手舉杯,則B攻擊</param> private void a_RaiseEvent(string hand) { if (hand.Equals("左")) { Attack(); } } /// <summary> /// 首領摔杯時的動作 /// </summary> private void a_FallEvent() { Attack(); } /// <summary> /// 攻擊 /// </summary> public void Attack() { Console.WriteLine("部下B發起攻擊,大喊:猛人張飛來也!"); } } /// <summary> /// 部下C /// </summary> public class GeneralC { CaptainA captainA; public GeneralC(CaptainA a) { this.captainA = a; a.RaiseEvent += new RaiseEventHandler(a_RaiseEvent); // 訂閱舉杯事件 a.FallEvent += new FallEventHandler(a_FallEvent); // 訂閱摔杯事件 } /// <summary> /// 首領舉杯時的動作 /// </summary> /// <param name="hand">若首領A右手舉杯,則攻擊</param> private void a_RaiseEvent(string hand) { if (hand.Equals("右")) { Attack(); } } /// <summary> /// 首領摔杯時的動作 /// </summary> private void a_FallEvent() { Attack(); } /// <summary> /// 攻擊 /// </summary> public void Attack() { Console.WriteLine("部下C發起攻擊,一套落英神掌打得虎虎生威~"); } } static void Main(string[] args) { //首領A要搞一場鴻門宴,吩咐部下B和C各自帶隊埋伏在屏風兩側,約定以杯為令: //若左手舉杯,則B帶隊殺出;若右手舉杯,則C帶隊殺出;若直接摔杯,則B和C同時殺出。 CaptainA captainA = new CaptainA(); // 定義首領A GeneralB generalB = new GeneralB(captainA); // 定義部下B GeneralC generalC = new GeneralC(captainA); // 定義部下C // 首領A左手舉杯 captainA.Raise("左"); // 首領A右手舉杯 //captainA.Raise("右"); // 首領A摔杯 //captainA.Fall(); Console.ReadKey(); } } }
執行:
1.左手舉杯:
2.右手舉杯
3.摔杯
end