C#event EventHandler事件触发

来源:互联网转载 | 更新日期:2023-09-05 06:05:38

 

在定义委托时,前面加上event关键字,可以保证该委托不能在外部被随意触发,两者异同:

 注册注销内部触发外部触发
delegate+=-=InvokeInvoke
event delegate+=-=Invoke不允许

所以,event关键字有助于提高类的封装性,物理隔绝代码耦合,迫使类设计更追求高内聚。

定义一个显示消息的event并包装

public event EventHandler evt_log_handle;protected virtual void On_evt_log_handle(object obj, EventArgs e){if (this.evt_log_handle != null)this.evt_log_handle(obj, e);}

在外部触发:

On_evt_log_handle("日志", null);

在其他类中,可以注册这个事件

m_project.evt_log_handle += m_process_evt_log_handle;  m_project为定义event的类的实例

定义事件实现的代码

void m_process_evt_log_handle(object sender, EventArgs e){string sLog = sender as string;...}

 控制台输入'a'累加到上限实现事件的示例

using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks;namespace ConsoleApp2 {class Program{static void Main(string[] args){Counter c = new Counter(new Random().Next(10));c.ThresholdReached += c_ThresholdReached; //注册事件Console.WriteLine("press 'a' key to increase total");while (Console.ReadKey(true).KeyChar == 'a'){Console.WriteLine("adding one");c.Add(1);}}static void c_ThresholdReached(object sender, ThresholdReachedEventArgs e) //事件实现{Console.WriteLine("The threshold of {0} was reached at {1}.", e.Threshold, e.TimeReached);Environment.Exit(0);}}class Counter{private int threshold;private int total;public Counter(int passedThreshold){threshold = passedThreshold;}public void Add(int x){total += x;if (total >= threshold){ThresholdReachedEventArgs args = new ThresholdReachedEventArgs();args.Threshold = threshold;args.TimeReached = DateTime.Now;OnThresholdReached(args);}}public event EventHandler<ThresholdReachedEventArgs> ThresholdReached; protected virtual void OnThresholdReached(ThresholdReachedEventArgs e){if (this.ThresholdReached != null){this.ThresholdReached(null, e);}}}public class ThresholdReachedEventArgs : EventArgs{public int Threshold { get; set; }public DateTime TimeReached { get; set; }}}

 

上一篇:jQuery案例

下一篇:南怀瑾讲述99个人生道理

相关文章

Copyright © 网站出售-网站交易平台 版权信息

网站备案号:黔ICP备2023004141号