一、delegate 的用法
using System; namespace hellword { //定义一个委托 public delegate void delegateMedth (int a, int b,string Desc); //定义一个类 public class MedthClass { //定义需要委托执行的方法 public void Sum(int a, int b, string Desc) { Console.WriteLine(Desc +"求和:"+ (a + b).ToString()); } //定义需要委托执行的方法 public void Less(int a, int b, string Desc) { Console.WriteLine(Desc + "求差:" + (a - b).ToString()); } //定义需要委托执行的方法 public void Multiply(int a, int b, string Desc) { Console.WriteLine(Desc + "求乘:" + (a * b).ToString()); } //定义接受参数中包含委托的方法 public void SumTransit(int a, int b, string Desc, delegateMedth callback) { callback(a, b, Desc); } } class Program { static void Main(string[] args) { MedthClass m = new MedthClass(); //使用场景1 delegateMedth delegateA = new delegateMedth(m.Sum); delegateA(1, 2, "使用场景1"); //使用场景2 m.SumTransit(1, 2, "使用场景2", delegateA); //使用场景3 delegateMedth delegateSum= new delegateMedth(m.Sum); delegateMedth delegateLess = new delegateMedth(m.Less); delegateMedth delegateMultiply = new delegateMedth(m.Multiply); delegateMedth delAll = delegateSum + delegateLess; delAll += delegateMultiply; delAll(1, 2, "使用场景3,委托的累加。"); //使用场景4 delAll -= delegateSum; delAll(1, 2, "使用场景4,委托的累加。"); //使用场景5 delegateMedth CopydelAll = delAll - delegateLess; CopydelAll(1, 2, "使用场景5,委托的减。"); Console.WriteLine("Hello World!"); Console.ReadLine(); } } }
二、event 的用法之一
using System; namespace hellword { //定义一个委托 public delegate void CustomEventHandler(object sender, CustomEventArgs args); class Program { static void Main(string[] args) { var pub = new CustomEventPublisher(); var sub1 = new CustomEventSubscriber("sub1", pub); var sub2 = new CustomEventSubscriber("sub2", pub); // Call the method that raises the event. pub.DoSomething(); // Keep the console window open Console.WriteLine("Press any key to continue..."); Console.ReadLine(); Console.ReadLine(); } } public class CustomEventArgs : EventArgs { public CustomEventArgs(string message) { Message = message; } public string Message { get; set; } public string id { get; set; } } //自定义事件发布者 public class CustomEventPublisher { //定义一个事件 public event CustomEventHandler CustomEvent; public void DoSomething() { //在此编写一些有用的代码,然后引发该事件。 您还可以在执行代码块之前引发一个事件。 OnRaiseCustomEvent(new CustomEventArgs("Event triggered")); } protected virtual void OnRaiseCustomEvent(CustomEventArgs e) { // 如果没有订阅者,事件将为null if (CustomEvent != null) { //格式化字符串以在CustomEventArgs参数内发送 e.Message += $" at {DateTime.Now}"; // 搞事 CustomEvent(this, e); } } } //自定义事件订阅者 public class CustomEventSubscriber { private readonly string _id; public CustomEventSubscriber(string id, CustomEventPublisher pub) { _id = id; // 订阅 pub.CustomEvent += HandleCustomEvent; } //定义引发事件时要采取的措施。 void HandleCustomEvent(object sender, CustomEventArgs e) { Console.WriteLine($"{_id} received this message: {e.Message}"); } } }
三、event 的用法之二
人生就是一列开往坟墓的列车,路途上会有很多站,很难有人可以自始至终陪着走完。当陪你的人要下车时,即使不舍也该心存感激,然后挥手道别。
浙公网安备 33010602011771号